Java8 Optional 올바르게 사용하는 방법
2022. 10. 3. 19:26
Java
Optional 문법에 대해서는 설명하지 않는 글이다. 아주 간단하기 때문에 문법은 찾아보길 바란다. Optional전에 null은 어떻게 처리했을까? null을 반환할지 안할지 모른다. 하지만 Optional을 반환하면, nullable을 알 수 있다. null 체크를 깜박할 수 있다. nullable을 알 수 있기 때문에 깜빡하지 않는다. null를 반환하는 것 자체가 문제다. null을 반환하지 않으면, 예외를 던지는 방법도 있다. null 반환, 예외 반환 딱 2개 뿐이었다. null을 반환하면, NPE가 발생할 수 있고, 클라이언트가 직접 처리해야 한다. 예외 던지기 예외를 던지면 클라이언트가 null 처리를 안해도 되기 때문에 편하긴 하지만, checkedException을 던질 경우 강제로 ..
Java static과 클래스 로드 및 초기화
2022. 8. 28. 23:35
Java
서론 이번에 GOF 디자인 패턴을 공부하면서 기선님 강의를 봤는데 챕터1인 싱글톤 패턴 부터 막혔다. static을 몰랐기 떄문이다. 그래서 이번 기회에 조금 더 정리할 수 있는 기회가 되었다. 예전에도 헷갈렸던 것 같다. 이번 기회에 조금 더 알아가는 기회가 될 것 같다. 내가 이해한 static은 공유 자원 + 클래스 로드 시 같이 메모리에 올라가는 것이었다. 예전에도 공유라는 것에 현혹 되었던 적이 있는데 다시 초기화가 된 것 같다. 조금 더 알아 보자. 싱글톤 구현하기 강의에서 싱글톤 구현하는 방법을 몇 가지 배웠다. 기존에 알고 있는 방식은 잠재된 버그가 있다는 것을 알게 되었다. 코드를 살펴 보자. 멀티 쓰레드 환경에서 안전하지 않는 코드 public class Settings { privat..
JDBC란 무엇인가?
2022. 8. 17. 21:51
Java
JDBC의 탄생 배경 과거에는 애플리케이션에서 DB로 어떻게 접근했고, 무엇이 문제였을까? 과거에는 애플리케이션 서버가 직접 DB로 접근을 했다. 그렇기 때문에 DB 마다 연결, SQL 전달, 응답 방법 등이 모두 달랐다. 문제점은 크게 두 가지가 있었다. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 변경된다. 개발자가 데이터베이스마다 연결, SQL 전달, 응답 방법 등을 모두 학습해야 한다. JDBC 표준 인터페이스 등장 위와 같은 문제로 JDBC(Java Database Connectivity)는 바아에서 데이터베이스에 접근할 수 있도록 하는 자바 API이다. 아래와 같이 인터페이스를 제공하고, 각 데이터베이스 벤더에서 JDBC 인터페이스에 맞..
CountDownLatch로 동시성 테스트 하기
2022. 5. 14. 19:34
Java
CountDownLatch란? 쓰레드가 2개 이상일 경우 일정 개수의 쓰레드가 끝난 후 다음 쓰레드가 실행될 수 있도록 대기시키고, 끝나면, 다음 쓰레드가 실행될 수 있도록 하는 것이다. 언제 사용할 수 있을까? 나는 동시성 테스트를 할 때 사용했다. 여러가지 상황에 활용할 수 있겠지만, 테스트 코드를 작성할 때를 예를 들어보겠다. 사용 해보기 테스트용 클래스 public class CountDownLatchT { int count = 1; public void call() { System.out.println("count = " + this.count++); } } countDownLatch 미사용 시 @Test void CountDownLatch() throws InterruptedException ..
Java Comparator, Comparable
2022. 2. 22. 16:26
Java
Java Comparator, Comparable Comparator와 Comparable이란? 객체 정렬에 필요한 메서드를 제공하는 인터페이스 Comparable 객체의 기본 정렬 메서드를 제공하는 인터페이스 public interface Comparable { int compareTo(Object o); // 주어진 객체(o)를 자신과 비교 } Comparator 기본 정렬 기준 외에 다른 기준으로 정렬할 때 사용하는 인터페이스 public interface Comparator { int compare(Object o1, Object o2); } 기본 정렬과 기본 정렬이 아닌 것이 뭘까? 기본 정렬이란 말 그대로 디폴트 정렬을 의미합니다. 특별히 정렬 기준을 설정하지 않는다면, 기본 정렬 기준을 사용..
리플렉션으로 DI 컨테이너 만들기
2021. 12. 21. 19:40
Java
java 리플렉션 리플렉션이란? 클래스 타입을 알지 못해도, 해당 클래스의 필드, 메서드 등 클래스의 메타 정보에 접근할 수 있도록 도와주는 자바 API이다. 즉, 리플렉션은 클래스나 메서드의 메타정보를 사용해서 동적으로 호출하는 메서드를 변경할 수 있다. 구체적인 클래스 타입을 알지 못한다? 이 의미는 스프링의 DI 컨테이너에서 @Service, @Repository를 생각하면 된다. 해당 애노테이션을 붙이면 new를 해주지 않아도 알아서 주입이 된다. 이걸 가능하게 하는 것이 리플렉션이다. 그럼 클래스 타입을 알지 못한다는 것은 무슨 상관일까? 이 부분은 해당 글이 마지막 DI 프레임워크 만들기에서 더상세하게 설명 하겠지만, 간략히 설명 하겠다. 코드로 예를 들어보자. 아래는 두 개의 클래스가 있다...
자바 바이트 코드 조작하는 방법
2021. 12. 10. 14:43
Java/바이트 코드 조작하는 방법
바이트 코드를 조작하기 자바에서는 바이트 코드를 조작할 수 있다. 대표적인 예로 코드 커버리지를 측정하는 jacoco 라이브러리가 있다. 정확히는 모르지는 바이트 코드를 조작하여 코드 커버리지를 측정한다고 한다. 활용 예 코드 커버리지 jacoco 라이브러리 스프링 컴포넌트 스캔이 애노테이션들을 찾는 과정 등등 활용 범위가 굉장히 많다고 함. 바이트 코드를 조작한다는 것이 무엇일까? 간단한 예제 코드를 살펴 보겠다. 바이트 코드를 조작하여 텅빈 모자에서 토끼를 꺼내는 예제이다. 분명 Moja.java에는 빈 문자열이 들어있다. 하지만 소스는 건들지 않고 바이트 코드만 조작해서 토끼를 꺼낼 수 있다. 어떻게 코드를 조작할까? byteBuddy라는 라이브러리를 사용하면 조작할 수 있고 코드는 아래와 같이 작..
일급 컬렉션 - 비지니스에 종속적인 자료구조
2021. 12. 3. 21:37
Java
클린 코드 TDD 과정을 진행 중 일급 컬렉션에 대해 잘못 이해한 부분이 있어 정리를 하기 위해 작성하는 글 입니다. 먼저 해당 글을 참고 하였습니다. 일급 컬렉션 장점 중 비지니스에 종속적인 자료구조에 대해 추가 설명을 하는 내용이니 이를 모르시는 분은 해당 글을 보고 오시면 좋을 것 같습니다. 비지니스에 종속적인 자료구조 먼저 제가 잘못 생각한 부분은 이렇습니다. 일급 컬렉션은 하나의 컬렉션 인스턴스 변수를 가지고 내부에서 로직을 수행하면 된다!! 라고 이해 하였습니다. 상태와 로직이 한 곳에서 관리된다는 장점을 종속적인 자료구조라고 이해한 것 입니다. 위와 같이만 작성을 해도 외부에서 사용할 때는 일급 컬렉션 내부는 신경 쓸 일이 없고, 작성된 로직을 사용하면 되기 때문에 종속 되었다!! 라고 생각..