객체와 자료구조

    [클린 코드] 객체와 자료구조(4)

    자료 전달 객체 자료 구조체의 기본적인 형태는 공개 변수만 있고 함수가 없는 클래스이다. 이런 자료 구조체를 자료 전달 객체(DTO, Data Transfer Object)라 한다 DTO는 데이터베이스에 저장된 가공되지 않은 정보를 어플리케이션 코드에서 사용할 객체로 변환되는 단계에서 가장 처음 사용된다. 좀 더 일반적인 형태는 '빈(bean)'구조이다. 아래 코드를 보면 private 변수를 조회/설정 함수로 조작한다. 이는 사이비 캡슐화로 별다른 의미없는 행동이다. public class Address{ private String street; private String city; public Address(String strret, String city){ this.street = street; t..

    [클린 코드] 객체와 자료구조(3)

    디미터 법칙 디미터 법칙은 모듈은 자신이 조작하는 객체의 속내용을 몰라야 한다는 법칙이다. 앞의 포스팅에서 봤듯이, 객체는 자료를 숨기고 함수를 공개한다. 즉, 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미이다. 좀 더 정확히 표현하면 디미터 법칙은 클래스 C의 메소드메서드 f는 다음과 같은 객체의 메소드만 호출해야 한다. 다음 코드는 디미터 법칙을 어기는 듯이 보인다. getOptions() 함수가 반환하는 객체의 getScratchDir() 함수를 호출한 후 getScratchDir() 함수가 반환하는 객체의 getAbsolutePath() 함수를 호출하기 때문이다. final String outputDir = ctxt.getOptions().getScratchDir().getAbsolut..

    [클린 코드] 객체와 자료구조(2)

    자료/객체 비대칭 객체는 추상화 후로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. 위 두 정의는 본질적으로 상반된다. 사소한 차이일지라도 그 차이가 미치는 영향은 매우 크다. 아래 코드를 보면 Geometry 클래스는 세 가지 도형 클래스를 다룬다. 각 도형 클래스가 간단한 자료구조이고, 아무런 메소드도 제공하지 않는다. 다만 도형이 동작하는 방식은 Geometry 클래스에서 정의한다. public class Square{ public Point topLeft; public double side; } public class Rectangle{ public Point topLeft; public double height; public ..

    [클린 코드] 객체와 자료구조(1)

    자료 추상화 아래 두 클래스는 모두 2차원 점을 표현한다. 차이점은 한 클래스는 구현을 외부로 노출하고 다른 클래스는 구현을 완전히 숨겼다. //6-1) 구체적인 Point 클래스 public class Point{ public double x; public double y; } //6-2) 추상적인 Point 클래스 public interface Point{ double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 6-2 코드는 어떤 좌표계를 사용하는지 알 길이 없지만 인터페이스는 자료 구조를 명백하게 표..