본문 바로가기

Java/정리42

[Java] enum의 정의와 활용 작년에 엑셀 다운로드 모듈을 만들 때 cell의 속성과 관련한 부분에서 enum을 적용했었다. 올해 엑셀 모듈에 새로운 구현 클래스를 추가해볼까 하고 살펴보던 중, enum에 대해 더 공부하고 블로그로 작성하면 좋을 것 같아 이렇게 정리한다. 🧊 enum(열거형) 이란?열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는다. .java확장자를 사용하며, 클래스이기 때문에 생성자를 가질 수 있다. 생성자의 접근제어자는 private으로 외부에서 인스턴스화할 수 없다. 그리고 마찬가지로 내부에서도 열거형을 인스턴스화할 수 없다. 필드도 추가할 수 있고, 일반 메소드를 생성할 수 있다. 만약 필드.. 2023. 8. 4.
컴파일? 빌드? 배포? 컴파일, 빌드, 배포의 개념 및 차이 위 개념들의 차이를 정확히 알아보고자 검색하던 중 좋은 비유로 설명 및 비교를 해준 글이 있어서 해당 글을 인용하여 설명을 시작하려 한다. (아래 '참고 및 출처' 의 1번) 본인이 번역가라고 생각해보자. 이번에 출판사로부터 일을 하나 받았는데, 영문으로된 글을 한글로 번역하는 일이다. 번역된 글은 출판사에서 적절히 페이지를 나누어 책으로 엮을 것이며, 완성된 책은 출판이 되어 서점에 진열될 것이다. 우리는 방금 컴파일, 빌드, 배포의 모든 과정을 훑어보았다. 1. 영문으로된 글을 한글로 번역하는 것은 '컴파일'이다. 2. 번역한 글을 책으로 엮는 것은 '빌드'이다. 3. 완성된 책을 고객들이 읽을 수 있도록 서점에 진열하는 것은 '배포'이다. 4. 1~2번 과정을 .. 2022. 10. 12.
ServletOutputStream 🎁 파일을 읽어올 때에는 FileInputStream으로 읽어온 뒤 브라우저에 출력할 때에는 ServletOutputStream을 사용한다. 바이트 기반 출력 스트림의 최상위 클래스인 OutputStream을 상속받아 만들어진 출력 스트림 클래스이다. Outputstream 뿐만 아니라 ServletOutputStream은 추상클래스이기 때문에 인스턴스를 생성할 수 없다. ServletResponse 클래스에 getOutputStream()이라는 함수를 통해 servletOutputStream 인스턴스를 받아서 사용해야한다. // resp = HttpServletResponse의 객체 ServletOutputStream sos = resp.getOutputStream(); sos.write(쓰고자하는 데.. 2022. 6. 24.
[java] tomcat 버전 오류 프로젝트 업데이트를 받은 후 서버를 실행하니 아래와 같이 바로 오류가 났다. javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.jdbc.pool.DataSourceFactory] at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:81) -------------------------------------생략------------------------------------------ (--생략--) The DB C.. 2022. 4. 5.
[Java] jsp에서 다운로드 로직 구현 시 주의할 점 jsp에서 엑셀파일을 다운로드하는 로직을 구현했다. 이전에 작성된 코드를 보니 finally 부분에 아래 코드가 있었다. 왜 outputStream을 비워주고 다시 선언해줘야 하는지 궁금해서 알아보았다. out.clear(); out = pageContext.pushBody(); jsp에서 다른 jsp에 있는 페이지를 호출해서 다운로드 로직을 실행하는 경우 이미 stream이 열려 있는 상태이다. 따라서 추가적으로 스트림을 열려고 하면 이미 스트림이 존재한다는 에러메세지가 아래와 같이 뜨게 된다. Servlet.service() for servlet jsp threw exception java.lang.IllegalStateException: getOutputStream() has already been.. 2022. 3. 29.
[Java] 파일 다운로드할 때 파일명 지정하는 방법 웹에서 파일을 다운로드할 때 파일명을 지정해주는 코드이다. 사용자가 요청하여 받은 request 객체에서 User-Agent 값을 얻어, User-Agent 값에 따라 response객체에 Content-Disposition 속성을 지정하여 보낸다. Content-disposition 은 HTTP Response Body에 오는 콘텐츠의 기질을 알려주는 HTTP Response 헤더의 종류로, inline과 attachment 속성을 선택할 수 있다. 1) inline 속성 : 브라우저가 인식할 수 있는 파일확장자(예를들면, html,gif,jpg,txt...)를 가진 파일은 바로 웹 페이지에서 열고, 나머지는 무조건 다운로드상자가 뜨게 한다. 2) attachment 속성 : 로컬 컴퓨터에 다운로드하여.. 2022. 3. 29.
[eclipse] A java Runtime Environment(JRE) or Java Development Kit(JDK) must be available in order to run Eclipse. 이클립스를 설치하려고 하니 이런 팝업창이 뜨면서 설치가 안됐다. JDK 설치경로가 잘못되어서 뜨는 팝업이었다. 그래서 eclipse.ini 파일에서 jdk 경로를 수정해줬다. eclipse.ini 파일에서 제일 상단에 있는 부분에서 JDK 설치경로를 변경해주면 된다. -vm JDK 설치경로\bin\javaw.exe 참고 및 출처 : https://dgtl.tistory.com/68 2022. 1. 9.
[Java] 파일 출력 방법들 이전 글 중 "[Java] IO(입출력)_스트림"은 자바에서 파일 입출력의 전반적인 내용을 다뤘었다. 이번 글에서는 자바에서 파일을 이용한 출력방법들과 각 방법들의 차이점에 대해 알아보려한다. 파일 쓰기 FileOutputStream public class FileOut { public static void main(String[] args) { // TODO Auto-generated method stub opStream("fileOutputStream.txt"); fWriter("fileWriter.txt"); pWriter("printWriter.txt"); } static void opStream(String fileName) { try { FileOutputStream output = new F.. 2021. 12. 23.
[Java] 매개변수 전달방식(Call-by-value, Call-by-reference) 매개변수 - 메소드를 호출해서 객체간 메시지가 전달될 때 부가 정보가 필요한 경우 매개변수 형태로 전달한다. - 매개변수로 전달되는 데이터에 따라 동작 방식이 달라진다. - 기본형일 경우 Call-by-value, 참조형인 경우 Call-by-reference 방식으로 전달된다. 값에 의한 호출(Call-by-value) 1. 매개변수의 타입이 기본형인 경우 2. 변수의 주소가 아닌 값을 복사해서 매개변수로 전달한다. 3. 실제 매개변수 값은 영향을 받지 않는다. public class CallBy { public static void main(String[] args) { // TODO Auto-generated method stub int m1 = 5; System.out.println("변경전 : .. 2021. 12. 22.
[java] String의 메모리 저장 방식 오늘 치과를 갔는데 20~30분 기다려야한다고 해서 되게 간단한 코딩테스트를 풀었다. 금방 풀고 다른 분 풀이를 보며 모르는 걸 검색하다가 우연히 string의 메모리 저장방식에 대한 글을봤다. 예전에 이 부분을 공부했었는데 꽤 잊어버려서 내 블로그에 예전 글들도 다시보고 다른 블로그 글도 보면서 공부했다. 1. String 객체 메모리 할당 String은 참조 자료형이므로 stack영역에 참조값(heap메모리에 저장된 주소값)을 저장하고, heap영역에는 참조값이 가리키는 데이터값이 저장된다. //string, 메모리구조 String[] a = null; System.out.println(a); // null ->stack영역 공간 할당 a = new String[] {"안녕"}; // Heap 영역에.. 2021. 10. 14.
[Java] Static 변수,메소드,싱글톤 패턴 static은 메모리에 한번 올려지면 어느 곳에서나 공통으로 사용이 가능하고, static메소드는 객체를 생성할 필요없이 클래스명.메소드명으로 사용가능하다고 알고 있었는데, JDBC를 공부하면서 나와서 확실히 공부해두고 싶어서 복습차 공부해보았다. 점프투자바 페이지에서 static을 설명한 걸 봤는데 첨 공부할때 보다 이해도도 높고 또 '아 맞다 이런 것도 있었지'하고 다시 생각나는 것들도 있어서 정리해두려 한다! (지금 셤공부도 해야하고 세미플젝도 해야하고 sqld시험준비도 해야하는데 넘 바쁘지만 static을 내가 쓴 게 아닌 다른 사람이 쓴 코드로 보면서 이해하니 너무 좋아서 정리하고싶어졌다...차근차근 해야지...쥬륵) Static 변수 public class HousePark { static S.. 2021. 8. 28.
[Java] 컬렉션프레임워크_Map Map 인터페이스 키(key)와 값(value)으로 구성되어 있으며, 키와 값은 모두 객체이다. 키는 중복저장을 허용하지 않는 Set방식이고, 값은 중복저장이 가능한 List방식이다. 따라서 키를 중복하여 저장하려는 경우에는 기존에 있는 키에 해당하는 값에 덮어씌운다. 구현 클래스로는 HashMap, HashTable, LinkedHashMap, TreeMap, Properties이 있다. 1. HashMap 선언 및 할당 key 값은 String, vale는 Student형인 stdMap 객체를 생성하였다. 아래와 같이 키 값은 보통 String으로 하는데 이는 int인 경우 index로 관리하는 ArrayList와 차이가 없기 때문이다. HashMap stdMap = new HashMap(); 2-1.. 2021. 7. 19.