-
클린코드 - 객체와 자료구조개발/프로그래밍 2020. 10. 6. 17:05
자료를 세세하게 공유하기보다 추상적인 개념으로 표현하는게 좋다.
아무생각없이 get set 함수를 만드는것은 추상화를 이루지않는다.
객체는 자료를 숨기고
자료를 다루는 함수만 공개한다.
자료구조는 자료를 공개하고
함수가 없다.
class Square { Point topLeft; double side; } class Rectangle { Point topLeft; double height; double width; } class Geometry { final double pi = 3.14; double area(dynamic shape) { if (shape is Square) { Square s = shape; return s.side * s.side; } else if (shape is Rectangle) { Rectangle r = shape; return r.height * r.width; } } }
위 클래스는 자료구조를 사용한 절차적인 클래스이다.
만약 area 가아닌 다른 함수, 예로 둘레를 구하는 새로운 함수를 구현할때
Square 라는 클래스(자료구조)는 영향받지 않는다.
즉 새로운 함수를 구현할때마다 자료 구조를 변경하지 않는다.
하지만 새로운 자료구조 (도형 타입) 이 나오면 Geometry 의 함수들을 다 고쳐야한다.
만약 앞으로 구현해야할 시스템에 삼각형, 원, 오각형 등등... 이런식으로 필요하다면 이렇게 구현하면 안된다.
더 이상의 자료구조가 필요없고 도형의 길이, 반지름, 변의갯수 둘레 등등... 이런식으로 새함수가 필요하다면
이렇게 구현하는게 좋다.
class Square implements Shape { Point topLeft; double side; @override double area() { return side * side; } } class Rectangle implements Shape { Point topLeft; double height; double width; @override double area() { return height * width; } }
위 클래스는 객체지향적이다. 새 도형 (자료구조) 을 추가해도 기존 함수들을 영향을 받지않는다.
하지만 area가 아닌 다른 새로운 함수를(Shape에서) 추가하려면 각 도형마다 다 수정해줘야한다.
계속해서 새로운 자료구조가 필요한경우 이방법을 쓰는게좋다.
정리하여
함수보다 새로운 자료구조가 필요한 경우 객체지향 방법을 사용
새로운 함수가 필요한경우 자료구조와 절차적인 코드가 더 적합하다.
'개발 > 프로그래밍' 카테고리의 다른 글
클린코드 - 클래스 (0) 2020.10.12 클린코드 - 오류,예외처리 (0) 2020.10.07 vscode 비주얼 스튜디오 코드 형식맞추기 - 가로줄크기, 글자크기, 들여쓰기 설정 (0) 2020.10.04 클린코드 함수 - switch 문 (0) 2020.09.27 클린코드 함수 - 추상화 (0) 2020.09.27