Java 21

Effective Java 제 2장 - 객체 생성과 파괴

생성자보다 정적 팩토리 메서드! 오버로딩으로 다양하게 표현한다해도 각 생성자의 구체적인 내용을 알기 어렵다. 정적 팩토리 메서드를 통해 인스턴스 생성 메서드를 구성하면 다양한 타입, 다양한 매개변수에 대응할 수 있고 구체적인 설명을 메서드명으로 보여줄 수 있다. // 지양 Data d = new Date(instant); // 지향 Date d = Data.from(instant); 매개변수가 많으면 Builder 패턴! 대부분의 칼럼은 기본값을 가지지만 소수의 칼럼만 설정해야 할 필요성이 있다면 빌더를 사용해야 한다. 왜냐면 모든 칼럼을 정의하는 생성자는 불필요하고 그렇다고 하여 오버 로딩을 이용해 각 경우의 수마다 생성자를 만들어 내는 것 또한 비현실적이다. 따라서 해당 경우의 경우, 빌더 패턴을 이..

Java 2023.08.22

Effective Java - 1회독 요약

👣 개요 빠르게 훑어보며 각 부분이 큰 그림 속의 어떤 위치에 있는지 파악하는 단계. Effective Java는 총 480쪽으로 이뤄져 하루에 100쪽을 읽는다는 목표로 1주일 내에 읽을 예정이다. 해당 회독은 글쓴이가 주로 어떤 전략으로 효율적인 코드를 작성하는지 집중하고 동시에 어떤 코드를 지양하는지에 집중할 계획이다. 물론 위 계획은 독서 중에 수정될 수 있다. 👣 지향하는 코드 1. 의도를 알기 쉬운 함수, 변수명. 2. 불필요한 객체 생성이 없는 코드 👣 제 2장 - 객체 생성과 파괴 Effective Java 제 2장 - 객체 생성과 파괴 생성자보다 정적 팩토리 메서드! 오버로딩으로 다양하게 표현한다해도 각 생성자의 구체적인 내용을 알기 어렵다. 정적 팩토리 메서드를 통해 인스턴스 생성 메서..

Java 2023.08.15

Effective Java - 책 읽기 전략

👣 개요 이전에 'Real MySQL 8.0'을 읽을 때는 책의 내용을 모두 블로그에 기록하려고 노력했다. 이 방법은 꼼꼼하게 읽을 수 있어서 도움이 되었지만 시간이 너무 많이 소비될 뿐더러 실질적으로 이 책을 읽으므로서 내가 무엇을 할 수 있는지를 많이 얻지 못했다고 생각했다. 때문에 Effective Java 책은 1회독에는 빠르게 어떤 내용이 있는지 파악하며 큰 틀만 기록할 계획이고 2회독에는 내가 그동안 작성한 코드에 어떻게 적용되는지 혹은 어떤 경우에 적용이 되는지를 가정해서 작성한 코드를 기록할 예정이다.

Java 2023.08.15

JUnit

👣 개요 Application의 품질을 높이기 위해 Test Code를 작성해야 한다. 여러 가지 상황들에 대한 검증을 서비스 운영 시점이 아닌 코드 작성 시기로 앞당기는 것이라 여길 수 있다. JUnit은 Java용 단위 테스트 프레임워크다. JUnit을 통해 부분적으로 동작을 확인하고 문제를 파악할 수 있다. 👣 특징 간단한 사용법 JUnit은 간단한 API를 제공하여 테스트를 작성하고 실행하는 것이 쉽다. 자동화 테스트를 자동으로 실행하고 결과를 확인할 수 있으므로, 개발자의 수동 노력을 최소화한다. 테스트 그룹화 테스트를 그룹화하여 특정 부분만 테스트하거나 전체 테스트를 실행할 수 있다. 테스트 실행 순서 JUnit은 테스트 메서드의 실행 순서를 보장하지 않는다. 이는 테스트가 독립적으로 실행되도..

Java 2023.07.30

Auto Boxing & Auto UnBoxing

👣 개요 Java에는 Wrapper 클래스가 존재한다. Wrapper 클래스란 기본 타입 클래스[Ex) int]를 객체로 다뤄야 할 때, 사용하는 클래스다. 내부에 기본 타입의 데이터를 가지고 있고 그것을 다루기 위한 유틸리티 메서드로 구성되어 있다. 사용 예시 1. 제너릭 타입을 요구하는 클래스를 사용할 때, List arr = new ArrayList(); 2. Wrapper 만 가지고 있는 상수 or 메서드를 사용하기 위해, Integer max_value = Integer.MAX_VALUE; Integer str2int = Integer.valueOf("123"); 👣 Auto Boxing & Auto UnBoxing // 박싱 int i = 10; Integer num = new Integer(..

Java 2023.07.17

문자열

👣 개요 자바에서 문자열을 표현하는 객체들의 차이를 확인. String StringBuilder StringBuffer 저장 위치 Heap or String Pool Heap Heap Modifable Immutable Mutable Mutable Thread Safe O X O 여기서 Modifable이란? 예를 들어 "처갓집 (슈프림양념)치킨 먹고 싶다"라는 문자열이 있을 때, 해당 문자열을 "처갓집 (프라이드)치킨 먹고 싶다"라고 문자의 일부분만 변경 가능할 수 있냐는 것이다. String의 경우 일부 문자만 변경하고 싶어도 새로운 객체를 만들어서 할당해야 하기에 불필요한 메모리 할당을 유발한다. 하지만 동시에 Thread Safe하다는 특성을 가질 수 있다. 👣 String String 객체는 '..

Java 2023.07.17

Call By Value & Call By Reference

👣 개요 두 개념 모두 메소드를 실행하기 전에 메소드의 Parameter를 넘길 때의 방법에 대한 것이다. public static void transform(int func_digit, SomeThing func_instance) { func_digit = 10; func_instance.setId(10); } public static void main(String[] args) { SomeThing instance = new SomeThing(); instance.setId(5); int digit = 5; transform(digit, instance); System.out.println(digit); // output : 5 System.out.println(instance.getId()); //..

Java 2023.07.17

JDK, JRE, JVM

👣 JDK - [Java Development Kit] 자바 개발을 위해 필요한 프로그램들의 모음. JDK = JRE + [ JavaC : 자바 컴파일러, Javap : 바이트 코드를 소스 코드로 해석하는 디어셈블러, JavaDoc : 자바 소스로부터 HTML 형식의 API 도큐먼트 생성, Jar : 자바 클래스 파일을 압축한 자바 아카이브 파일(.jar) 생성, 관리, Jdb : 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거, ... ] 플랫폼에 독립적이라는 특징을 가지고 있다. 👣 JRE - [Java Runtime Environment] 자바 실행을 위해 필요한 프로그램들의 모음. 자바 개발자가 아닌 자바 프로그램 사용자가 필요로하는 프로그램이다. JRE = JVM + [ Java :..

Java 2023.07.17

Garbage Collector

👣 개념 가비지 컬렉터는 JVM에 구성요소로서 RunTime Data Area 내부의 Heap 영역에 할당된 메모리 영역을 해제하기 위해 존재하는 장치다. Stack 영역과 달리 Heap 영역의 메모리는 의도적인 메모리 해제 과정을 거치지 않으면 결국 사용하지 않음에도 불구하고 사용할 수 없는 메모리 공간으로 가득찬다. 이를 메모리 누수라고 한다. 이런 상황을 피하기 위해 C 언어에서는 개발자가 직접 해제하는 방식을 택하고 있는데 이는 비즈니스 코드 이외의 코드도 작성해야 하기에 이를 불필요한 Cost가 많이 소모된다. 자바의 경우 JVM의 Garbage Collector가 이런 과정을 자동화하게 된다. 👣 Stop The World GC는 사용자가 직접 상황 판단을 하는 것이 아니다 보니 성능에 문제를..

Java 2023.07.17