목록Java (24)
개발그래머
개요운영 업무를 진행하면 동적으로 설정값들을 구성해야 하는 경우가 있습니다.1번 DB를 사용하여 구성2번 프로퍼티를 사용하여 구성DB를 사용하는 방법은 개발자가 아닌 실질적인 사용자가 UI를 통해 지속적으로 관리를 하는 상황일때 주로 사용하는 편입니다.가벼운 작업은 프로퍼티를 통해 하는 편인데 기본적인 프로퍼티로 설정하게 되면 서버를 재배포해야 하는 번거로움이 생깁니다.그렇기 때문에 외부파일로 프로퍼티를 동적으로 구현하여 관리하는 것을 지향하는 편이며 해당 방법을 구현하는 법을 올리고자 한다.사용법implementation("commons-configuration:commons-configuration:1.10") commons-configuration을 import하여 사용하게 된다2 버전도 있지만 ..
개요운영 업무를 하다 보면 추가해야 될 것들, 변경해야 될 것들, 등록해줘야 할 것들이 생기는데 주로 csv파일(개발자) 혹은 엑셀 파일(업무담당자)로 전달받게 된다.유저 자동 가입 처리라던지, csv 파일에 해당하는 값으로 변경한다던지 소소한 잡일들이 많이 생기는데 생각외로 많은 시간을 할애하게 되고 업무의 흐름을 방해하여 자동화하기로 하였다. WatchService 란?Java NIO(Non-blocking I/O) 패키지의 일부로서 파일 시스템의 변경 사항을 감시하고 관찰하는 데 사용되며 파일 또는 디렉토리의 생성, 수정, 삭제 등의 이벤트를 감지할 때 활용됨파일 시스템의 특정 디렉토리에 대한 변경 사항을 모니터링하기 위해 사용되며 감시 대상 디렉토리에 대한 이벤트가 발생하면 이를 감지하고 애플리케..
목표문자열, 콜렉션, 스트림에 대해 학습하세요학습할 것 (필수)문자열(String)콜렉션(Collection)스트림(Stream)문자열(String)String의 기본 개념Java에서 불변(immutable) 객체임한 번 생성된 String 객체는 변경할 수 없음문자열 조작은 항상 새로운 문자열 객체를 생성함java.lang 패키지에 포함되어 있으며 별도의 임포트 없이 사용할 수 있음String의 불변성멀티스레드 환경에서도 String 객체를 안전하게 공유할 수 있음(Thread-safe)JVM은 문자열 리터럴을 String Pool이라는 메모리 영역에 저장하므로 동일한 문자열 리터럴이 재사용되므로 메모리를 절약할 수 있음(캐싱 가능)String s1 = "Hello";String s2 = "Hello"..
발견 코드를 리팩터링하며 보인 문구이며 왜 이 문구가 발생했는지 궁금하여 찾아보게되었다. 과정 List emails = communityUserRepository.findByCommunityId(1L).stream() .filter(communityUser -> communityUser.getCreatedUser().getEmail() != null) .map(communityUser -> communityUser.getCreatedUser().getEmail()).collect(Collectors.toList()); 해당 커뮤니티에 해당하는 유저들을 가져오는 로직에서 'filter()' and 'map()' can be swapped 라는 문구가 인텔리제이에서 발생한것이다 List emails = co..
목표 자바의 람다식에 대해 학습하세요 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다식 사용법 List numbers = List.of(1, 2, 3, 4, 5); // (parameter) -> expression numbers.forEach(number -> System.out.println(number)); parameter : 람다 함수의 매개변수 목록을 정의함 -> : 람다식의 구분자 expression : 람다 함수의 본문 람다식 Java8에 도입된 람다식은 함수형 프로그래밍 개념을 Java에 도입한 중요한 기능임 익명 함수를 만들어 코드를 더 간결하고 유연하게 작성할 수 있게 해 주며 컬렉션 처리, 쓰레드 처리, GUI 이벤트 ..
목표 자바의 제네릭에 대해 학습하세요 학습할 것 (필수) 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드카드) 제네릭 메소드 만들기 Erasure 제네릭 사용법 제네릭의 탄생 이유 제네릭은 자바 5 버전부터 도입되었음 이전 컬렉션(List, Set, Map...)과 가은 데이터 구조를 사용할 때, Object 타입을 이용하여 모든 유형의 객체를 담을 수 있었음 public class GenericExample { public static void main(String[] args) { List list = new ArrayList(); list.add(1); list.add(10L); list.add(2.5); list.add("hello world"); for (Object o : list) ..
목표 자바의 Input과 Ontput에 대해 학습하세요 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 스트림(Stream) public class InputStreamExample { public static void main(String[] args) { try (InputStream stream = new FileInputStream("hello.txt")) { int data;..
목표 자바의 애노테이션에 대해 학습하세요 학습할 것 (필수) 애노테이션 정의하는 방법 @Retention @Target @Documented 애노테이션 프로세서 애노테이션 정의하는 방법 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface CustomAnnotation { String value(); int count() default 1; } @Retention = 애노테이션 정보가 유지되는 범위를 지정 @Target = 애노테이션이 적용할 수 있는 대상의 유형을 지정 @interface = 애노테이션을 정의 애노테이션 멤버는 메서드 형태로 선언됨(value()와 count(..