[클린코드] 6장-객체와 자료구조

Jake·2022년 3월 10일
0

책 읽기

목록 보기
5/5

1. 객체와 자료구조는 근본적으로 양분된다


  • 절차적인 코드
    • 기존 자료구조를 변경하지 않으면서 새 함수를 추가하기 쉽다.
    • 새로운 자료 구조를 추가하기 어렵다.
  • 객체 지향 코드
    • 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다
    • 새로운 함수를 추가하기 어렵다.

Note

  • 여기서 절차적인 코드는, 클린코드의 맥락 상 자료구조를 사용해서 특정 로직을 수행하는 코드를 의미합니다.
  • '모든 것이 객체'라는 생각은 미신입니다. 따라서 개발자는 다음 두 방법을 유도리 있게 활용해야 합니다.
    • 새로운 자료 타입이 필요한 경우에는 객체 지향 기법을
    • 새로운 함수가 필요한 경우에는 절차적인 코드 + 자료 구조를

2. 디미터 법칙


모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙.

디미터 법칙은 "클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다고 주장한다.
예시로 보면 다음과 같다.

public class Example {
	VariableObject variableObject;
    
	public ReturnObject methodF(ArgumentObject argumentObject) {
    	CreatedObject createdObject = new CreatedObject();
        ...
        return returnObject;
    }
}

위 예시에서, methodF()가 호출할 수 있는 다음과 같은 객체의 메서드만 호출할 수 있다

  1. Example 클래스 (= 메서드가 속한 클래스의 다른 메서드들은 호출해도 된다)
  2. CreatedObejct (= 메서드가 생성한 객체)
  3. ArgumentObject (= 메서드의 인수로 넘어온 객체)
  4. VariableObject (= 인스턴스 변수에 저장된 객체)

이때 Example 클래스의 객체는 ReturnObject의 메서드는 호출하면 안 된다.

Note

  • 다음과 같은 예시를 살펴봅시다.
    String tempStr = example.methodF().getSomething();
  • 여기서 getSomething() 메서드의 호출이 옳은 것인지 옳지 않은 것인지는 methodF가 반환하는 것이 무엇이냐에 따라 달라집니다!
    • 자료구조일 경우: 자료 구조는 내부 구조를 노출하기 때문에 디미터 법칙이 적용되지 않는다 -> 옳은 코드. 써도 좋다!
    • 객체일 경우: 객체는 내부 구조를 노출하면 안되기 때문에 디미터 법칙이 적용된다 -> 나쁜 코드. 디미터 법칙 위반!
  • Q: 그럼 모든 자료구조는 공개 변수만 쓰고, 객체는 공개 함수를 쓰면 오해가 없겠네요?
    A: 객체는 다음은 클린코드에서 발췌한 내용입니다.

    자료 구조는 무조건 함수 없이 공개 변수만 포함하고 객체는 비공개 변수와 공개 함수를 포함한다면, 문제는 훨씬 간단하리라. 하지만 단순한 자료 구조에도 조회 함수와 설정 함수를 정의하라 요구하는 프레임워크와 표준이 존재한다.

:( 결국, 잡종 구조가 되지 않으려면 개발자가 직접 주의를 기울여가며 코드를 작성하는 수 밖에 없는 것 같습니다.

profile
Java/Spring Back-End Developer

0개의 댓글