본문 바로가기

프로그래밍 독서/클린코드

6. 객체와 자료구조

자료구조와 객체지향에 대해서 이야기 한 챕터입니다.

 

두개가 서로 정 반대라고 주장하고 용도에 맞게 잘 써야한다고 합니다.

 

객체지향의 목적은 캡슐화. 쉽게 말하면 사용자가 내부구조를 알 수 없게 잘 숨기는 것이고

 

자료구조는 구조를 그대로 두고 따로 함수를 제공하지 않는 경우를 말합니다.

 

도형을 나타내는 코드가 이해하기 쉽고 인상깊어서 아래 남기겠습니다.

 

 

 

자료구조

- 함수를 추가할때 도형 클래스 수정할 필요 없음

- 도형 추가하때는 함수들을 수정해야함

public class Square { 
	public Point topLeft; 
	public double side;
}

public class Rectangle { 
	public Point topLeft; 
	public double height; 
	public double width;
}

public class Circle { 
	public Point center; 
	public double radius;
}

public class Geometry {
	public final double PI = 3.141592653589793;

	public double area(Object shape) throws NoSuchShapeException {
		if (shape instanceof Square) { 
			Square s = (Square)shape; 
			return s.side * s.side;
		} else if (shape instanceof Rectangle) { 
			Rectangle r = (Rectangle)shape; 
			return r.height * r.width;
		} else if (shape instanceof Circle) {
			Circle c = (Circle)shape;
			return PI * c.radius * c.radius; 
		}
		throw new NoSuchShapeException(); 
	}
}

 

 

객체지향

- 도형을 추가하면 기존함수가 수정필요 없음

- 함수를 추가하면 도형클래스 전부 고쳐야함

public class Square implements Shape { 
	private Point topLeft;
	private double side;

	public double area() { 
		return side * side;
	} 
}

public class Rectangle implements Shape { 
	private Point topLeft;
	private double height;
	private double width;

	public double area() { 
		return height * width;
	} 
}

public class Circle implements Shape { 
	private Point center;
	private double radius;
	public final double PI = 3.141592653589793;

	public double area() {
		return PI * radius * radius;
	} 
}

 

 

이렇게 두개는 서로 정반대의 특성을 띄고 각자 맞춰서 잘 사용해야한다고 합니다.

 

작가의 주장으로는 제일 지양해야할 것은 잡종으로 두개를 섞어쓰는것.

 

단점이 두배가 되기 때문이라는데..

 

다만 제 생각에는 잘 섞어쓰면 특수하게 장점만 가져다 쓰는 경우도 있을 수 있을 것 같아 더 공부해봐야할 것 같습니다.

'프로그래밍 독서 > 클린코드' 카테고리의 다른 글

8. 경계  (0) 2022.01.12
7. 예외처리  (0) 2022.01.10
5. 형식 맞추기  (0) 2022.01.10
4. 주석  (0) 2021.12.05
번외) 코드포매팅 단축키  (0) 2021.11.22