728x90
반응형
6장. 객체와 자료구조
Clean Code 6장 (객체와 자료구조)
변수를 비공개로 정의하는 이유는 뭘까?
- 남들이 변수에 의존하지 않게 만들기 위함이다. 충동이든 변덕이든, 변수타입이나 구현을 맘대로 바꾸고 싶어서다.
- 그러면 왜 getter,setter 함수를 public으로 만들어서 비공개 변수를 외부에 노출할까?
진정한 의미의 클래스
는추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다.
// 구체적인 Vehicle 클래스
public interface Vehicle {
double getFuelTankCapacity();
double getGallonsOfGasoline();
}
// 추상적인 Vehicle 클래스 (더 좋다)
public interface Vehicle {
double getPercentFuelRemaining();
}
- 자료를 세세히 공개하기 보다는 추상적인 개념으로 표현하는게 좋다.
- 인터페이스의 단순 조회,설정 함수만으로는 추상화가 이루어지지 않는다.
절차지향 코드 vs 객체지향 코드
// 절차지향
// 각 도형들을 각각 클래스로 만들고, 도형이 동작하는 방식은 Geometry class에서 구현한다
public class Square{
public Point topLeft;
public double side;
}
public class Rectangle{
public Point topLeft;
public double height;
public double width;
}
public class Geometry{
public final double PI = 3.141592;
public double area(Object shape) throws NoSuchShapeException
{
if(shape~~)
}
}
// 객체 지향
// shape로 부터 상속받고, 각 도형에 맞는 넓이구하는걸 도형 클래스에서 구현
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;
}
}
두개의 차이점은?
- 장점
- 절자지향적 코드는 기존 자료구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. (Geometry에 추가)
- 객체지향적 코드는 기본 함수를 변경하지 않으면서 새 클래스를 추가하기가 쉽다.
- 단점
- 절차지향적 코드는 새로운 자료구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야한다.
- 객체지향적인 코드는 새로운 함수를 추가하기 어렵다. 모든 클래스를 고쳐야한다.
디미터 법칙
- 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙
- 객체는 자료를 숨기고 함수를 공개한다.
- 즉 객체는 조회함수로 내부 구조를 공개하면 안된다.
클래스 C의 메서드f는 다음과 같은 객체의 메서드만 호출해야 한다.
1. 클래스 C
2. f가 생성한 객체
3. f의 인수로 넘어온 객체
4. C의 인스턴스 변수에 저장된 객체
잡종 구조
- 절차 지향, 객체 지향을 둘다 섞으면 어떨까?
- 오히려 새로운 함수, 자료구조 둘 다 추가하기 어려운 문제가 생긴다. 더 안좋다!
자료 전달 객체 (DTO) 생략..
- DB와 통신할때나 소켓에서 받은 메시지의 구문을 분석할때 유용. get,set은 그냥 사이비 캡슐화로 별다른 이익을 제공하진 않음.
public class Addrdess{
private String street;
private String streetExtra;
public Address(String street, String streetExtra)
{
this.street = street;
~~
}
public String getStreet(){
return ~
}
}
결론
객체
는 동작은 공개하면서, 내부구조를 숨겨야 한다.- 기존 동작을 변경하지 않고 새 객체타입 추가는 쉽지만, 기존 객체에 새 동작을 추가하기는 어렵다.
자료구조
(절차 지향)는 내부구조를 노출해야 한다.- 기존 자료구조에 새 동작을 추가하긴 쉽지만, 새 자료구조 추가는 어렵다.
여기서 우리 프로젝트에 적용할점은?
- 음.. 객체는 자료를 숨긴다. 자료구조는 내부 구조를 공개한다의 차이를 배웠다.
- 적용할점은 잘 모르겠다 아직은..
728x90
반응형
'WEB > Clean Code' 카테고리의 다른 글
[Clean Code] 8장. 경계 (0) | 2022.02.22 |
---|---|
[Clean Code] 7장. 오류처리 (0) | 2022.02.21 |
[Clean Code] 5장. 형식 맞추기 (0) | 2022.02.20 |
[Clean Code] 4장. 주석 (0) | 2022.01.23 |
[Clean Code] 3장. 함수 (0) | 2022.01.22 |