아래의 글은 조슈아 블로크 저/개앞맵시 역, 『이펙티브 자바 Effective Java 3/E
』, 인사이트(2018), 7-13 쪽의 내용을 기반으로 작성하였습니다.

 

toString이 뭐지?

Object.toString : 클래스_이름@16진수로표시한해시코드

 

 

항상 해야하나?

항상 할필요는 없고 필요한 객체 (dto, entity 등) 에 적용하면 디버깅이 편하다

 

재정의는 어떻게?

lombok @ToString으로하면 편하고 아니면 재정의

 

참고사이트 : 

johngrib.github.io/wiki/Object-toString/

 

java.lang.Object.toString 메소드

 

johngrib.github.io

 

아래의 글은 조슈아 블로크 저/개앞맵시 역, 『이펙티브 자바 Effective Java 3/E
』, 인사이트(2018), 7-13 쪽의 내용을 기반으로 작성하였습니다.

 

equals가 뭐지?

 

잘 모르면 무턱대고 정의하지는 마라, Object클래스의 equals를 그대로 사용하라

왜냐하면 

정의하지 않고 그대로 사용하면 ? 현재 구현체는 동일한 객체는 자기 자신만 같게 됨.

 

동일/동등 이라고도 하고

식별성 논리적 동치성이라도 하고

identity와 equity 이 차이 ( 인터뷰 기초 문제이지도 하지요 ㅎㅎ)

identity : 물리적으로 같은 객체인가?

equals : 같은 값인가?

 

일반 규약은 뭐지? > equals 메서드를 재정의 할때는 일반 규칙을 따라야함.

반사성 : reflexivity : x.equals(x) = true

대칭성 : symmetry : x.equals(y) == true 이면 y.equals(x) == true이다

추이성 : transitivity : x.equals(y) == true 이고 y.equals(z) == true 이면 x.equals(z) == true 이다

일관성 : consistency : x.equals(y) 반복호출시 항상 일관된 값

null아님 : x.equals(null) 은 false 이다

 

왜 지켜야하지? > 그러니 잘못 만들면 side-effect가 발생함. 즉, equals를 많은 곳에서 사용하고 있음.

사용하는 곳, collection class, 객체 비교, serialization, 

 

참고 사이트 :

dzone.com/articles/identity-vs-equality-in-java

 

Identity Vs. Equality in Java - DZone Java

In this post, we take a quick look at identity and equality in Java, what they are, and how they compare to one another.

dzone.com

www.nextree.co.kr/p11101/

 

헷갈리기 쉬운 “동등비교” 와 “정렬”

입사하여 처음으로 참여하게 된 프로젝트는 보험회사 직원들의 업무 관리 프로그램을 구축하는 것이었습니다. 자바로 개발하는 프로젝트는 처음이여서 어떻게 구현해야하는지에 대한 걱정이 �

www.nextree.co.kr

d2.naver.com/helloworld/831311

www.gisdeveloper.co.kr/?p=5332

 

Java에서 HashMap을 위한 Custom Key 정의하기 – GIS Developer

Java의 HashMap 자료구조는 고유한 값인 Key와 1:1로 연관되는 값(Value)을 하나의 쌍(Pair)로 하여 여러 개의 쌍을 저장하는 자료구조입니다. 흔히 Key 값으로 문자열이나 정수값을 사용하는 것으로도 충

www.gisdeveloper.co.kr

vandbt.tistory.com/41

 

리스코프 치환 원칙 - Liskov Substitution Principle for Primer

리스코프 치환 원칙 LSP Liskov Substitution Principle 은 객체-디자인의 S.O.L.I.D 5원칙 중의 가장 이해하기 어려운 원칙이라고 할 수 있습니다. 다른 원칙들은 이름에서 힌트를 얻을 수 있는데 LSP만은 이�

vandbt.tistory.com

 

아래의 글은 조슈아 블로크 저/개앞맵시 역, 『이펙티브 자바 Effective Java 3/E
』, 인사이트(2018), 7-13 쪽의 내용을 기반으로 작성하였습니다.

 

자바의 기본적인 객체 생성은 생성자를 통한 생성임.

생성을 제어하기 위한 다양한 방법으로 singleton 패턴과 , enum 방식의 singleton 방식 등이 있음

생성의 편의와 생성시 파라미터를 주기위한 제어 목적으로 static factory method와 빌터 패턴 등이 있음

 

static factory method 패턴은 다음과 같은 장점이 있다.

 

1. 생성에 특정한 의미를 주어 가독성을 높인다.

Foo f = new Foo(); // 생성자 방식

Foo f = new Foo(20); // 20이 뭐지?

Foo f = new Foo(20, 10); // 20은 뭐고 10은 뭐지?

Foo f = new Foo(10, 20); // 순서가 다르면 다른 의미 // 다른 시그너쳐 못반들어냄 (int, int)는 1개여야함

Foo f2 = Foo.createFoo(); // 팩토리 메소드 방식

Foo f2 = Foo.createFoo().money(20); // 가독성 좋음

Foo f2 = Foo.createFoo().money(20).age(10); // 가독성 훨씬 좋고 유연함

Foo f2 = Foo.createFoo().age(10).money(20); // 순서가 의미가 없음.

주의 : 편하다고 막 남용하지는 말고 파라메터를 많이 set 해야해야되는 경우와 생성 비용이 높은 경우에 활용하면 좋다

 

2. 인스턴스 생성 제어가 가능

 

생성을 메서드해서 하므로 생성제어를 매서드 내에서 할 수 있다.

 

3. 반환 타입의 하위 타입 객체를 반환할 수 있느 능력

 

4. 입력 매개변수에 따라 매번 다른 클래스이ㅡ 객체를 반환

 

5. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 됨

 

static factory method 패턴은 다음과 같은 단점이 있다.

 

 

1. 상속 형태는 안됨

 

2. 어떤 메소드가 정적 메소드인지 알 수 없음 > 그래서 naming convention이 생겨남

 

 

정적 팩터리 메서드에 사용하는 naming conventions

방식 설명  
from 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드 Date d = Data.from(instance)  
of      
valueOf   String value1 = String.valueOf(1);
String value2 = String.valueOf(1.0L);
String value3 = String.valueOf(true);
String value4 = String.valueOf('a');
 
instance or getInstance      
create or newInstance      
get<Type>, new<Type>, type      

 

팩토리 메소드 패턴과는 다르다고 봐야한다. ( 팩토리 메소드 패턴 : johngrib.github.io/wiki/factory-method-pattern/)

팩토리 메소드 패턴 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내리도록 함

 

 참고사이트 : 

https://johngrib.github.io/wiki/static-factory-method-pattern

 

정적 팩토리 메서드(static factory method)

static 메서드로 객체 생성을 캡슐화한다

johngrib.github.io

johngrib.github.io/wiki/factory-method-pattern/

 

팩토리 메소드 패턴 (Factory Method Pattern)

객체를 생성하기 위한 인터페이스를 정의하고, 인스턴스 생성은 서브클래스가 결정하게 한다

johngrib.github.io

medium.com/webeveloper/%EC%8B%B1%EA%B8%80%ED%84%B4-%ED%8C%A8%ED%84%B4-singleton-pattern-db75ed29c36

 

싱글턴 패턴(Singleton Pattern)

자바와 스프링의 싱글턴 패턴(Singleton Pattern)과 차이점

medium.com

www.baeldung.com/java-constructors-vs-static-factory-methods

 

Java Constructors vs Static Factory Methods | Baeldung

Learn about static factory methods in Java and why they're sometimes preferred over constructors for instantiating and initializing objects.

www.baeldung.com

 

+ Recent posts