Home
Dohyun's Blog
Cancel

Item8 (finalizer와 cleaner 사용을 피하라)

finalizer와 cleaner 사용을 피하라 자바에서는 두 가지의 객체 소멸자를 제공한다. finalizer와 cleaner이다. finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다. 오동작, 낮은 성능, 이식성 문제의 원인이 되기도 한다. 쓰임새가 몇 있긴하지만 기본적으로 사용하면 안된다. 그래서 Java...

Item7 (다 쓴 객체 참조를 해제하라) feat. 약한 참조와 강한 참조

다 쓴 객체 참조를 해제하라 자바는 JVM을 통해 가비지 컬렉터를 갖추어 메모리 관리에 신경을 쓰지 않아도 될 것 같다. 하지만 메모리 관리에 신경을 써야한다. (메모리 누수에 신경써야 한다.) 메모리 누수? 가비지 컬렉터로 관리해주는데 어디서 메모리의 누수가 발생하고 왜 신경써야 하는 걸까? 아래 스택을 구현한 코드를 보자. public ...

Item6 (불필요한 객체 생성을 피하라)

불필요한 객체 생성을 피하라 똑같은 기능의 객체를 매번 생성하는 것 보다 객체 하나를 재사용하는 편이 좋을 때가 많다. 특히 불변 객체는 언제든 재사용이 가능하다. 우선 Java String이 어떻게 불필요한 객체 생성을 피하는지 알아보자. String의 불필요한 객체 생성 방지 String str = "cool"; // 1 String st...

Item5 (자원을 직접 명시하지 말고 의존 객체 주입을 사용하라)

자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 많은 클래스들은 하나 이상의 자원에 의존한다. 하나 이상의 자원에 의존하는 클래스를 만약 정적 유틸리티 클래스로 구현했을 때 어떤 문제가 있는지 보자. 하나 이상의 자원에 의존하는 정적 유틸리티 클래스 public class RandomNumberGenerator { private Rand...

Item4 (인스턴스화를 막으려거든 private 생성자를 사용하라)

인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드와 정적 필드만을 담은 클래스는 남용될 수 있어 안좋게 볼 수 있으나 때때로 유용하게 쓰일 수 있다. 정적 메서드와 정적 필드만을 담은 클래스 기본 타입 값이나 배열 관련 메서드를 모은 클래스 java.util.Arrays를 예시로 들 수 있다. public class ...

Item3 (private 생성자나 열거 타입으로 싱글턴임을 보증하자)

private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글톤 클래스를 만드는 방법은 다양하다. 디자인패턴 포스트에 싱글톤을 구현하는 방법 7가지를 정리해놓았다. 클래스를 싱글톤으로 만들었을 때의 단점은 테스트가 어려워 진다는 점이다. 타입을 인터페이스로 정의하고 그 인터페이스를 구현해 만든 싱글톤이 아니라면 싱글톤 인스턴스를 mock 구현으...

Item2 (생성자에 매개변수가 많다면 빌더를 고려하라)

생성자에 매개변수가 많다면 빌더를 고려하라 아이템 1에서의 정적 팩토리 메서드와 생성자에는 똑같은 제약이 있다. 생성자와 정적 팩토리 메서드는 매개변수가 많을 때 적절히 대응하기 힘들다. public class User { private int age; // 필수 private int phoneNumber; ...

Effective Java 시작하기 + Item 1 (생성자 대신 정적 팩토리 메서드를 고려하라)

현재 유레카라는 과정을 교육받고 있는데 내가 아는 내용이 많은 교육 초반부, 최종적으로 프로젝트를 진행하기 전 더 나은 구조와 설계를 가진 프로젝트를 만들려는 노력이 있는 것이 좋을 것 같아 Effective-Java 책의 내용을 읽으며 정리해보려고 한다. 이 책은 효율적인 자바 코드를 작성하기 위한 방법들을 소개해준다. 아이템이라는 것으로 각각의 ...

Controller 테스트에서 만난 오류 (csrf, HttpMessageNotReadableException)

개요 @Operation(summary = "웹툰 정보 가져오기") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "웹툰 정보 조회 성공", content = @Content(schema = @Schema(implementation = CommentResp...

Repository, Controller, Service 계층 테스트 (테스트와 인증)

테스트 코드를 작성하면서 각 계층별 테스트 코드가 각각 차이가 있고, 템플릿 형식으로 권장되는 방법이 있다는 사실을 알았다. Entity의 테스트 방법은 단순하게 자바 코드로 객체의 생성, 객체 내 메서드 등을 테스트해주면 되기 때문에 따로 정리하지 않고 Repository, Controller, Service 계층의 코드를 어떻게 테스트하면 좋을 ...