2020-08-19 TIL

1 minute read

인스턴스 필드와 인스턴스 메소드가 필요한 이유

의존 객체

  • 클래스는 상호 크로스로 의존 객체가 될 수 있다.
  • 객체지향은 절대 쌍방향으로 참조(레퍼런스)하지 말라고 이야기 한다.
  • 쌍방향이 되는 상황이 되면 인터페이스 등을 사용한다.

인스턴스 필드(non-static field)

  • new 명령을 통해 Heap 영역에 생성된다.
  • 개별적으로 다뤄야 할 값이라면 인스턴스 필드로 선언하라.(처음부터 인스턴스 필드로 만들어도 좋다.)
  • 인스턴스 필드를 다루는 메서드는 인스턴스 메서드(non-static method)로 선언한다.
  • 인스턴스 메서드는 호출할 때 반드시 유효한 레퍼런스(인스턴스 주소)가 있어야 한다.
  • 레퍼런스는 인스턴스 메서드의 내장(built-in) 로컬 변수인 this에 저장된다.
  • 인스턴스들이 공유하는 상수값은 인스턴스 필드로 만들 필요가 없고 스태틱 멤버(클래스 멤버)로 만든다.
  • 스태틱 필드로 만든 클래스가 여러개 필요해질 때 클래스를 여러개 만들지 말고 처음부터 인스턴스 필드로 만들어 대비하는 것이 좋다.
    • 클래스를 복붙하면 버그가 복사되었을 때 관리하기 어렵다.

생성자가 필요한 이유

생성자

  • 생성자는 인스턴스를 사용하는데 문제가 없도록 인스턴스 필드를 유효한 값으로 초기화시키는 일을 한다.
  • 생성자를 이용하여 의존 객체를 강제로 주입하게 한다.
    • 인스턴스를 생성할 때 의존 객체를 반드시 주입하도록 기본 생성자 대신 의존 객체를 파라미터로 받는 생성자를 추가한다.

UI 코드와 Data 코드 분리

  • 객체지향 프로그래밍을 할 때 다음 두 가지를 명심해야 한다.
    • Low Coupling
    • High Cohesion

관계도 낮추기(Low Coupling) 란?

  • 한 클래스가 많은 클래스에 의존하는 구조로 작성하면 의존 클래스가 변경될 때 마다 영향을 받기 때문에 유지보수에 좋지 않다.
  • 그래서, 가능한 의존하는 클래스의 접점을 줄이는 구조로 만드는 것이 좋다.

응집력 강화(High Cohesion) 란?

  • 한 클래스가 너무 다양한 역할을 수행하면 클래스의 코드가 커지고 변경 사항이 잦아지기 때문에 유지보수에 좋지 않다.
  • 그래서, 가능한 한 클래스가 한 개의 역할만 수행하게 만드는 것이 유지보수에 좋다.
  • 역할을 작게 쪼개게 되면 해당 클래스를 다른 프로젝트에서 재사용하기가 쉽다.

Categories:

Updated: