목록Java (81)
삶 가운데 남긴 기록 AACII.TISTORY.COM
Display class Display 클래스가 외관을 보여주는 역할을 하지는 않지만 GUI 자원을 관리하고 운영체제와 소통을 담당합니다. 코드에 있는 SWT/JFace 명령들을 운영체제에 호환되도록 바꾸어 전달하는 일을 합니다. 주요 메소드 Display() : 플랫폼 자원을 할당하고 Display 객체를 생성. getCurrent() : 사용자 인터페이스 스레드를 반환. readAndDispatch() : Display 객체가 이벤트를 해석해서 리스너로 넘겨 줌. sleep() : Display 객체가 이벤트를 기다림. Shell class Shell 클래스의 인스턴스는 위젯, 이벤트들과 연동하며, 시각적인 부분을 구현합니다. 운영체제에 접근하기는 하지만 윈도우 열기, 활성화, 최대화, 윈도우 닫기를..
classpath 경로 지정 JVM이 클래스 파일을 찾는 경로를 지정할 수 있습니다. java -cp /path/to/classes com.example.MyApp 힙 메모리의 최대/최소 용량 지정 객체들이 저장되는 메모리 영역인 힙 메모리의 최대/최소 크기를 지정해줄 수 있습니다. application 성격상 알맞게 조절 할 수 있죠. java -Xmx512m -Xms256m com.example.MyApp 시스템 프로퍼티 설정 시스템에서 전역적으로 사용하는 값들을 지정할 수 있습니다. 자바의 System 클래스의 getProperty()메소드를 이용해서 그 값들을 받을 수 있습니다. java.version, os.name, path.separator 같은 것들이 대표적인 시스템 프로퍼티입니다. jav..
자바 application에서 파일을 저장할 때 절대경로는 보통 사용하지 않고 상대경로를 사용합니다. System.property("user.dir")을 통해 현재 application이 실행되는 작업 디렉토리를 얻고 그 기반으로 생성되는 파일의 경로를 지정합니다. File.separator는 파일 경로를 생성 할 때 운영체제에 맞는 파일의 구분자를 자동으로 선택해 줍니다. public class DynamicFilePathExample { public static void main(String[] args) { // 현재 작업 디렉토리 확인 String currentDir = System.getProperty("user.dir"); // 파일 저장 경로 설정 (현재 작업 디렉토리 내의 example.t..
Spring 개발을 위해 STS를 다운로드 후 압축을 풀다가 파일 경로가 260자 이상 제한에 걸려서 압축 풀기에 실패했습니다. 반디집 설정에도 260자 넘어도 압축이 풀리도록 설정되어 있는데도 실패했죠. 반디집은 환경설정 > 기타 항목에 있습니다. Windows 10 1607 버전부터는 NTFS 파일시스템에서 길이 제한을 늘릴 수 있습니다. 1. 윈도우 키 + R 키를 눌러서 gpedit.msc 를 입력해서 그룹 정책 편집기를 실행합니다. 2. 컴퓨터 구성 -> 관리 템플릿 -> 시스템 -> 파일 시스템 경로를 찾아 갑니다. 3. "Win32 긴 경로 사용"을 선택해 사용 상태로 바꿔줍니다. 4. cmd 명령 프롬프트를 열고 gpupdate 를 실행해서 그룹 정책을 업데이트 합니다. 그러면 STS 압축..
application 실행시 arguments 지정 방법 메뉴 바에서 "Run" 또는 "Debug"을 선택한 후, "Edit Configurations"을 선택합니다. 원하는 구성(예: Application)을 선택하고, "Configuration" 탭에서 "Program arguments" 섹션에 인수를 입력합니다. "Run/Debug Configurations" 대화 상자에서 "Program arguments" 필드에 직접 값을 입력할 수 있습니다 "Run/Debug Configurations" 대화 상자에서 "Environment variables" 섹션을 통해 환경 변수를 설정할 수 있습니다. Runnable JAR 파일로 export 방법 1. 프로젝트 설정 확인: 프로젝트가 메이븐(Maven)..
이번에는 재귀 호출을 이용하여 특정 폴더의 내용을 모두 삭제하는 예제를 구현해봤습니다. import java.io.File; public class DeleteDirectoryExample { public static void main(String[] args) { String directoryPath = "C:/Temp"; // 윈도우 실행 기준 File directory = new File(directoryPath); // 디렉토리가 존재하면 삭제 수행 if (directory.exists()) { deleteDirectory(directory); System.out.println("디렉토리 및 하위 경로가 삭제되었습니다."); } else { System.out.println("디렉토리가 존재하지 ..
자바로 텍스트 파일을 생성해서 자장할 때 FileWriter(arg1, arg2) 메서드의 arg2 두번째 인수가 false냐 true냐에 따라 기존 파일을 overwrite할지 append 할지 결정 할 수있습니다. import java.io.FileWriter; import java.io.IOException; public class FileWriterExample { public static void main(String[] args) { // 파일 경로 및 파일명 설정(윈도우 기준) String filePath = "C:/예제 파일이름.txt"; try { // FileWriter 객체 생성 //두 번째 매개변수로 false를 전달하면 기존 파일이 있으면 내용을 덮어씀(overwrite) //tr..
날짜 및 시간을 지정한 형식 yyyyMMddHHmmss( 년도월일시분초)으로 출력하는 예제 입니다. import java.text.SimpleDateFormat; import java.util.Date; public class CurrentDateTimeExample { public static void main(String[] args) { // 현재 날짜 및 시간 가져오기 Date currentDate = new Date(); // 원하는 형식으로 날짜 및 시간 포맷팅 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); String formattedDateTime = dateFormat.format(currentDate); //..
groovy groovy는 jvm용 스크립트언어이며 gradle은 groovy를 사용한 빌드 도구입니다. gradle 소프트웨어 내부에 groovy가 포함되어 있으므로 따로 설치 하지 않아도 됩니다만, 여기서는 groovy언어 연습용으로 설치해보도록 합시다. 그루비 다운로드 링크: https://groovy.apache.org/download.html
ORA-01704 JAVA로 ORACLE DBMS에 JDBC로 프로그램을 작성할 때, 문자열이 4000자가 넘어가면 일반 String statement로 insert/update시 ORA-01704를 발생시키며 안됩니다. 그럴 때 java.sql.Clob 클래스를 사용해서 preparedStatement.setClob()를 써서 구현하면 CLOB 데이터를 insert/update 할 수 있습니다. 예제는 아래와 같습니다. import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import ja..
자바에서 String을 치환할 때 보통 replace()와 replaceAll()을 사용합니다. 결론부터 말하자면 replaceAll()은 정규식이 올 수 있다는 것이 차이입니다. 일반적인 문자열을 치환할 때 속도가 빠른 replace() 사용하고 보다 복잡한 치환을 할 때는 정규식을 지원하는 replaceAll()을 사용합니다. 아래 예제에서 보면 replaceAll()은 . 이나 대괄호가 있으면 정규식으로 인식하여 replace()와 다른 결과가 나온다는 것을 알 수 있습니다. package test; public class ReplaceTest { public static void main(String[] args) { String sampleText = "co.kr//123-abcd//[/]-aa..
html 파일에 한글 설정 server.xml 한글 설정 GET방식에서는 질의 문자열들을 URI에 포함되기 때문에 URI인코딩 처리 작업을 해야 합니다. server.xml 파일에 URIEncoding="UTF-8" 프로퍼티를 설정합니다. web.xml 한글 설정 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* POST 전송 방식은 요청 body에 담아 전달됩니다. CharacterEncodingFilter는 http상 주고받는 데이터의 헤더 값을 인코딩합니다. Servlet에서 request.setCharacterEncoding("ut..
의존성 주입(Dependency Injection) 의존성 주입은 디자인 패턴으로 제어의 역전(Inversion of Control)을 구현하기 위한 방법중의 하나입니다. 객체를 직접 생성하는 것이 아닌 외부에서 생성하여 주입 받는 방법을 말합니다. 클래스들은 서로 연결되어 있어서 의존성(dependency)이 강합니다. 그래서 인터페이스를 통해 클래스 사이의 직접적인 의존성을 제거해서 서로 느슨하게 결합하도록 유도하는 것입니다. 그래서 요구사항이 변경되어 클래스를 수정하게 될 때 의존하고 있던 클래스에 영향을 끼치지 않으면서 클래스를 수정할 수 있게 해주는 것입니다. IoC 컨테이너는 시스템의 모든 인스턴스 객체를 관리하고 인스턴스 객체들 사이의 의존성이 있으면 주입하는 일을 담당합니다. 일반적인 자바..
페이징 처리시 게시물 10개를 기준으로 10페이지씩 표기하는 방법을 기준으로 개발하는 것이 보통입니다. endPage endPage = (int)(Math.ceil(cri.getPage() / (double)displayPageNum) * displayPageNum); cri.getPage()는 현재 페이지 번호를 의미합니다. displayPageNum은 화면 하단에 페이징 버튼의 갯수를 의미합니다. 현재 페이지가 3일 때 : Math.ceil(3/10)*10 = 10 즉, endPage는 10입니다. 현재 페이지가 20일 때 : Math.ceil(20/10)*10 = 20 즉, endPage는 20입니다. 현재 페이지가 21일 때 : Math.ceil(21/10)*10 = 30 즉, endPage는 3..
Spring bean 스프링 프레임워크가 관리하는 클래스들의 인스턴스 객체들을 Spring bean 이라고 합니다. Spring bean 설정 방법 XML로 설정 할 때에는 아래 처럼 설정합니다. 어노테이션을 이용해서 설정할 때에는 아래처럼 클래스 위에 @Configuration 어노테이션을 설정하고, 메서드 위에는 @Bean 어노테이션을 설정해 줍니다. 패키지 경로는 net.aacii.app 으로 가정합니다. import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import net.aacii.app.service.SampleService; import ne..