profile
엘 프사이 콩그루
post-thumbnail

이펙티브 자바 #item23 태그 달린 클래스보다 계층 구조를 활용하라

enum 을 이용해 클래스의 Shape을 표현하고 Shape에 따라 area의 분기문이 생긴다. 이 코드의 문제점은 너무 장황하고 메모리가 낭비된다. 타입에 따라 전혀 사용하지 않는 변수가 생기고 area의 코드는 shape 분기마다 계산이 달라지므로 코드가 길어졌다.

2일 전
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item22 인터페이스는 타입을 정의하는 용도로만 사용하라

객체지향의 사실과 오해 라는 책에서 의미를 빌리면 타입은 개념이다. 개념이란 우리가 표현하고자 하는 물체의 본질이라 할 수 있다. 예를 들면 이상한 나라의 엘리스에서 정원사, 병정, 하트퀸, 하트 킹 등은 트럼프 인간으로 볼 수 있고 트럼프 인간은 납작한 트럼프 카드

2일 전
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item21 인터페이스는 구현하는 쪽을 생각해 설계하라

자바 8 이전의 인터페이스는 모든 클래스가 현재의 인터페이스에 새로운 메서드가 추가될 일은 없다는 생각으로 가정하고 작성했다. 그렇기에 메서드를 인터페이스에 추가하면 컴파일 에러가 발생하고 해당 인터페이스를 타입으로 삼는 모든 구현 클래스에 추가된 메서드를 모두 구현해

3일 전
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item20 추상 클래스보다는 인터페이스를 우선하라

자바에서는 다중 구현 메커니즘은 인터페이스와 추상 클래스, 이렇게 2가지이다. 이 둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다. 자바의 경우 단일 상속만 지원하니, 추상 클래스 방식은 새로

3일 전
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item19 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지해라

상속은 잘못될 위험성이 있다. 상속은 하위클래스가 상위 클래스를 재사용함과 동시에 추가 또는 새로운 api가 추가될 수 있는 데 이 때 sub 클래스는 super 클래스를 의존하게 된다. 이런 의존이 뜻하지 않은 결과를 만들어 낼 수 있기 때문에 상속의 경우 미리 이를

3일 전
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item18 상속보다는 컴포지션을 활용하라

상속은 객체지향에서 강력한 도구 중 하나이다. 상속을 통해 코드를 재사용하고, 템플릿 패턴으로 활용할 수 있다. 물론 문서화가 잘 되어 있고, 명확하게 확장할 목적으로 사용하면 굉장히 좋지만 일반적으로 상속은 캡슐화를 깨뜨릴 위험이 있다.상속은 java에서 protec

2023년 1월 19일
·
0개의 댓글
·

이펙티브 자바 #item16 public class에서는 public 필드가 아닌 접근자 메서드를 활용해라

위의 코드는 내부 구현을 외부 API로 그대로 사용하고 있다. 이것의 문제점은 내부 구현과 외부 API가 합쳐져 있기 때문에 나중에 코드 수정이 쉽지 않다는 점이다. 내부 구현은 언제든 수정 가능하고 외부로 노출되는 API는 좋은 방법이 아니다. 외부 API가 수정되면

2023년 1월 17일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item15 클래스와 멤버의 접근 권한을 최소화해라

객체 지향하면 떠오르는 3가지가 있다. 바로 다형성, 캡슐화, 상속 이다. 이 중 캡슐화는 잘 설계된 컴포넌트 설계에 필수적인 요소이다. 캡슐화란 정보은닉이라고도 하며 클래스의 내부 구현을 숨겨 구현과 API를 깔끔하게 분리하는 과정이다.오직 API를 통해서만 서로 다

2023년 1월 17일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item14 Comparable을 구현할지 고려해라

정렬 또는 자동 정렬되는 컬렉션에서 굉장히 유용하게 사용할 수 있다. 즉 클래스에 Comparable을 구현한다는 것은 클래스에게 natural order (기본 대소 비교 기능)을 제공해주는 것이라 할 수 있다. 적은 노력으로 굉장히 큰 이득을 얻을 수 있기 때문에

2023년 1월 12일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item12 toString을 재정의하라

toString을 재정의하지 않으면 16진수의 hashCode를 반환하고 디버깅시 이해하기 힘들다. toString으로 용도에 맞게 재정의 하면 디버깅시 객체 상태 파악에 용이하고 println, printf 나 assert구문에서도 훨씬 보기 좋게 쓰일 수 있다.to

2023년 1월 10일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item11 equals를 재정의하려거든 hashcode 또한 재정의하라

Equals를 구현했다면 HashCode 또한 반드시 구현해야 한다. 그 이유는 HashMap이나 HashSet과 같은 컬렌션의 원소로 사용하는 경우 Equals와 HashCode를 사용하는데 문제를 일으킬 수 있다.HashMap의 getNode 메서드로 실제 key를

2023년 1월 10일
·
0개의 댓글
·
post-thumbnail

이펙티브자바 #item10 equals는 일반 규약을 지켜 재정의하라

값은 표현하는 것이 아닌 동작을 표현하는 개체는 equals를 재정의할 이유가 없다. 그 중 하나의 예는 Thread이다.프로그래밍의 기본 원칙중 하나로 굳이 사용하지 않을 메서드는 구현하지 않는 것이다. equals를 비교할 일이 없는데 구현하는 것은 오버 프로그래밍

2023년 1월 9일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item9 try-finally 보다 try-with-resource를 사용하라

일반 객체를 소멸하는데는 GC만으로 충분하다. 그러나 외부 시스템 자원과 연동을 위해 InputStream, OuputStream, sql.Connection 등을 활용한다면 사용후 자원을 닫아주는 것이 필요하다. 이럴 때 try-with-resource를 활용할 수

2023년 1월 6일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item8 finalizer와 cleaner 사용을 피하라

c++에서는 객체 소멸자가 기본으로 제공되지만. 자바의 경우 finalizer와 cleaner를 활용해 구현해야한다. finalizer의 경우 java 9 이후로 deprecate 되었고, 그 이후 대안으로 cleaner를 사용한다.메모리와 외부 시스템 연결과 같은 작

2023년 1월 6일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 #item7 다 쓴 객체 참조를 해제해라

자바의 경우 메모리를 자동으로 가비지 컬렉터가 관리해주기 떄문에 C, C++ 보다 메모리 관리하기가 편하다. 그러나 자칫 메모리를 관리할 필요 없다고 생각할 수도 있는데, 그것은 사실이 아니다. 메모리 누수 Case

2023년 1월 5일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 # item3 private 생성자나 열거 타입으로 싱글턴임을 보증하라

싱글턴이란 오직 하나의 인스턴스를 보장하는 방식을 이야기한다. 싱글턴 클래스의 예이다.위 코드는 Elvis INSTANCE를 초기화할때 한번만 인스턴스를 초기화한다.다만 private 생성자를 reflection을 활용해 호출할 수 있기는 하다.정적 팩토리 메서드를 활

2022년 12월 31일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 # item2 생성자에 매개변수가 많다면 빌더를 고려하라

생성자가 3개까지는 점층적 생성자 패턴을 사용해도 크게 문제가 없다. 점층적 생성자 패턴이란, 평소 생성자를 생성하는 방식으로 생성자를 정의하는 패턴이다.이렇게 생성자가 3개 이상에 점층적 생성자 패턴을 적용해보았다. 특히 필수 생성자가 3개를 초과하면 굉장히 복잡해진

2022년 12월 30일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 # item 1 생성자 대신 정적 팩토리 메서드를 고려하라

코드를 보면 of, from 등 static 메서드를 많이 본 적이 있다. 정적 팩토리 메서드를 사용하면서 장점과 유의할 점에 대해서 알아보자new Store(a, b, c) < - > Store.newInstance(a, b, c)생성자와는 다르게 네이밍을 지어

2022년 12월 26일
·
0개의 댓글
·
post-thumbnail

VO(또는 래핑 객체)의 직렬화 문제

Vo 객체를 표현 계층에 사용하다. 이번 프로젝트를 진행하면서 VO의 직렬화에 대해서 고민을 했다. 기본적으로 Controller를 통해서 데이터를 주고 받을 때 Dto 객체를 활용한다. Dto 객체 자체는 문제가 없었지만 이번에 DDD를 처음 적용하면서 표현 영역을

2022년 12월 19일
·
0개의 댓글
·