728x90
반응형

java 8

[이펙티브 자바] 3장 - 모든 객체의 공통 메서드를 읽으며

들어가기 이번 주에 읽은 챕터는 '모든 객체의 공통 메서드'로 equals, hashcode, toString, clone, comparable 메소드를 다룬다. 각 메소드들은 재정의할 때 지켜야하는 규약이 존재하고, 정말 조심스럽게 사용해야만 하는 메소드들 또한 존재한다. 이번 주에 이펙티브 자바를 읽으며 알게 된 사실을 짧게나마 정리해보겠다. 아이템 10: equals는 일반 규약을 지켜 재정의하라 equals 메소드는 보기에 정말 간단하게 재정의 할 수 있는 것처럼 보이지만, 사실은 재정의할 때 지켜야하는 은근히 까다로운 규약들이 존재한다. 그 규약들은 Objects 명세에 적혀있는데, 요약하자면 다음과 같다. 반사성: x.equals(x)는 true 대칭성: x.eqauls(y)가 true이면, ..

개발/자바 2021.06.16

정적 팩토리 메소드 방식은 API 변경없이 싱글턴이 아니게 변경할 수 있다. (보충 설명)

이전에 작성했던 이펙티브 자바 아이템 3: 싱글턴 보증 방법 정리에서 제대로 이해하지 못했던 부분이 있었다. 바로 정적 팩토리 메소드 방식으로 싱글턴을 만드는 방법에서 장점으로 존재했던, API를 변경하지 않고도 싱글턴이 아니게 변경할 수 있다는 부분이었다. API를 변경하지 않고 싱글턴이 아니게 변경할 수 있다는 것을 코드를 예시로 들어 작성하면 다음과 같다. 이전에 작성했던 정적 팩토리 메소드 방식의 싱글턴 인스턴스를 얻는 방법이다. public class YongCoding{ // 인스턴스를 얻기 위해서는 정적 팩토리 메소드를 이용해야한다. private static final YongCoding INSTANCE = new YongCoding(); // private 생성자 private YongC..

개발/자바 2021.06.13

[이펙티브 자바] 아이템 5 ~ 9 정리

사람의 마음이란 참으로 간사하다. 이번 주는 한 챕터당 열심히 정리하기로 결정했으니, 짧은 글도 글 하나로 등록해야겠다! 라고 생각한게 바로 15분 전인데.. 바로 한 글에 모든 내용을 정리하려고 하고 있으니 말이다. 이번 글에서 정리할 내용은 이펙티브 자바 2장의 아이템 5 ~ 9에 해당하는 내용이다. 아이템 5: 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 이건 스프링 프레임워크를 사용하면서 배운 내용 중에 하나라서 그런지 굉장히 반갑다. 개발을 하다보면 하나의 클래스가 다른 클래스를 사용(의존)하게 되는 경우가 많은데, 이런 경우에 사용하는 특정한 클래스를 명시해서 사용하면 기능적인 요구사항으로 인해 코드 변경이 필요할 때, 유지보수가 굉장히 힘들어진다. 따라서 클래스 내에서 자원을 명시해..

개발/자바 2021.06.09

[이펙티브 자바] private 생성자를 이용한 인스턴스화 방지

아이템 4: 인스턴스화를 막으려거든 private 생성자를 사용하라 너무나도 짧고 간단한 내용이라 따로 글을 작성하는 것이 맞는건지 생각을 해봤지만, 지금까지 작성해온게 있기 때문에 이번 주차는 이렇게 정리를 하기로 결정했다. 이번 챕터를 이해하기 전에 무조건 알아두어야 하는 사실은 바로 "정적 멤버만 담은 유틸리티 클래스의 경우 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 생성한다." 이다. 이럴 경우 인스턴스를 만들어서 사용할 계획이 아닌 유틸리티 클래스도 인스턴스를 생성할 수 있게 되는데... 실제로 이 사실을 몰라서 팀에 배치받고 업무 이전에 수행했던 과제에서 인스턴스 생성이 가능한 유틸리티 클래스를 작성했던 경험이 있었다. (코드 리뷰에서 걸렸다) 이 문제는 아래와 같이 클래스에 ..

개발/자바 2021.06.09

[이펙티브 자바] private 생성자나 열거 타입으로 싱글턴 보증하기

아이팀 3: private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴은 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. ex) 무상태 객체, 설계상 유일해야 하는 시스템 컴포넌트 단점: 싱글턴 클래스를 사용하는 클라이언트를 테스트하기 어려워진다. 싱글턴을 만드는 방식 여기서는 두 가지 방식을 설명한다. 두 방식 모두 공통적으로 생성자는 private으로 감추고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 사용해서 싱글턴을 구현한다. 1. public static final 필드인 방식 public class YongCoding{ public static final YongCoding INSTANCE = new YongCoding(); // 생성자는 priv..

개발/자바 2021.06.09

[이펙티브 자바] 빌더 사용하기

아이템 2: 생성자에 매개 변수가 많다면 빌더를 고려하라 정적 팩토리 메소드와 생성자 모두 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 제약이 존재한다. 이렇게 선택적 매개변수가 많을 때 프로그래머들은 점층적 생성자 패턴 혹은 자바빈즈 패턴을 자주 사용했다. 이번 장에서는 점층적 생성자 패턴과 자바빈즈 패턴을 요약하고 이 두가지 패턴의 장점을 적절히 조합한 빌더 패턴을 소개한다. 점층적 생성자 패턴 (Telescoping Constructor Pattern) 앞서서 작성했던 글에서 사용한 햄버거 코드를 다시 이용하겠다. 이번에는 햄버거의 영양성분을 코드에 추가하게 되었다. public class Burger extends Food{ private int patty, cheese; // 필수 // ..

개발/자바 2021.06.06

[이펙티브 자바] 생성자 대신 정적 팩토리 메소드

아이템 1: 생성자 대신 정적 팩터리 메서드를 고려하라 클라이언트가 클래스의 인스턴스를 얻는 방법 public 생성자 (전통적인 방법) 정적 팩토리 메소드(static factory method) public 생성자를 이용한 인스턴스 얻기 클라이언트가 클래스의 인스턴스를 얻는 전통적인 방법은 public 생성자를 이용하는 것 // 귀찮아서 간단하게 만든 예제 // Burger라는 클래스가 있을 때, Burger 클래스의 인스턴스를 얻는 방법은 public 생성자를 이용하는 것 public class Burger{ private int patty, cheese; public Burger(int patty, int cheese){ this.patty = patty; this.cheese = cheese; }..

개발/자바 2021.06.06

[이펙티브 자바] 2장 - 객체 생성과 파괴를 읽으며

들어가기 이번 주부터 이펙티브 자바를 읽기 시작했다. 아무래도 자바를 사용하며 백엔드 개발을 하다보니 자바를 효율적으로 사용하는 방법을 배울 수 있으면 참 좋겠다라고 생각을 하고 있었는데, 마침 좋은 기회가 생겨서 이펙티브 자바 스터디를 시작하게 됐다. 이펙티브 자바를 읽으며 알게 된 내용은 되도록 한 주에 한번씩은 정리하여 글을 작성하려고 한다. 이펙티브 자바 2장 - 객체 생성과 파괴 2장은 객체 생성과 파괴에 대한 내용을 다룬다. 즉, 객체는 언제, 어떻게 생성해야 하는지 그리고 사용이 끝났을 때 어떻게 리소스를 정리하면 될지와 같은 내용을 다루는데, 이 책에서 소개하는 객체 생성과 파괴 방법은 아래와 같이 세가지로 분류 할 수 있다. 1) 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 ..

개발/자바 2021.06.06
728x90
반응형