본문 바로가기

우아한테크코스

클래스와 인스턴스

 

다음 내용은 우아한테크코스에서 클래스와 인스턴스를 주제로 수업한 내용을 정리한 것이다.

 

클래스


  • 클래스는 일종의 '객체의 팩토리' 로 볼 수 있다.
  • 아쉽게도 Java에서 제공하는 new 연산자는 충분히 강력하지 않아 유사한 객체가 존재하거나 재사용 가능한지 확인하지 않는다.
  • 클래스를 객체를 반환할 수 있는 웨어하우스로 바라봐야 한다.
  • 응집도가 높고 견고한 클래스에는 적은 수의 메서드와 상대적으로 더 많은 수의 생성자가 존재한다. ex) 3 ~ 5의 public 메서드, 7 ~ 10개의 생성자
  • 초기화 로직을 오직 하나의 생성자에만 위치시키고 이 생성자를 '주 생성자(primary constructor)'라고 부른다.
  • 부 생성자(secondary constructor)라고 부르는 다른 생성자들이 주 생성자를 호출하도록 만든다.
1
2
3
4
5
6
7
8
9
10
public class LottoNumber { 
    private final int value;​    
    public LottoNumber(final String value) {        
        this(Integer.parseInt(value));    
    }​    
    
    public LottoNumber(final int value) {        
        this.value = value;    
    }
}

 

상속


  • 상속은 객체 사이의 관계를 복잡하게 만들 수 있다. 하지만 상속 그 자체가 문제인 것은 아니다-> 상속을 올바르게 사용하자
  • 상속을 할 때 상속하는 클래스의 내부를 알아야 메서드를 구현할 수 있는 경우가 발생한다.-> 캡슐화가 깨진다
  • 상속이 적절한 경우 : 클래스의 행동을 확장(extend)하는 것이 아니라 정제(refine)할 때
    • 확장 : 새로운 행동을 덧붙여 기존의 행동을 부분적으로 보완
    • 정제 : 부분적으로 불완전한 행동을 완전하게 만드는 것
  • 객체 지향 초기에 가장 중요시 여기는 개념은 재사용성(reusability)이었지만, 지금은 워낙 시스템이 방대해지고 잦은 변화가 발생하다 보니 유연성(flexiblity)이 더 중요한 개념이 되었다.
  • 오라클에서는 '불변객체가 가져다주는 이점은 메로리를 낭비하는것 보다 크다' 라고 말했다.

 

불변 객체의 이점


불변 객체의 이점 1.

  • 객체가 완전하고 견고한 상태이거나 아니면 아예 실패하는 실패 원자성(failure atomicity)을 가진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Cash {
    private int dollars;
    private int cents;
 
    public mul(final int factor) {
        this.dollars *= factor;
    
        if (/* 뭔가 잘못 됐다면 */) {
            throw new RuntimeException("oops...");
        }
        
        this.cents *= factor;
    }
);

위의 mul 이라는 코드에서 중간에 에러가 발생했다면 익셉션을 호출하고 끝나겠지만 이미 dollars는 변해 있는 상황이 발생할 수 있다.

 

 

불변 객체의 이점 2.

  • 시간적 결합(temporal coupling)을 없앨 수 있다.

 

불변객체의 이점 3.

스레드 안정성

  • 객체가 여러 스레드에서 동시에(concurrently) 사용될 수 있고 예측 가능한(predictable) 결과를 보장하는 객체의 품질

 

불변객체의 이점 4.

  • 단순성(simplicity), 객체가 더 단순해질수록 응집도는 더 높아지고, 유지보수는 더 쉬워진다.

 

불변 객체의 이점 5.

  • 불변 객체의 크기가 작은 이유는 불변 객체의 경우 생성자 안에서만 상태를 초기화할 수 있기 때문이다.

 

불변객체의 이점 6.

  • 불변 객체에는 ‘식별자 변경(identity mutability)’ 문제가 발생하지 않는다.

 

반응형

'우아한테크코스' 카테고리의 다른 글

준 강의 - 프론트엔드 기본 꿀팁  (0) 2020.05.15
api 설계  (0) 2020.05.12
데이터 베이스  (0) 2020.04.24
테스트하기 어려운 코드  (0) 2020.03.31
람다와 스트림  (0) 2020.03.20