오늘도 삽질중

클린코드 책을 읽고서 chapter. 객체와 자료구조 본문

기타

클린코드 책을 읽고서 chapter. 객체와 자료구조

Choi3950 2020. 11. 3. 17:15
반응형

클린코드 chapter. 객체와 자료구조를 읽고 개인적인 생각을 정리한 글입니다.

틀린 내용이 존재 할수도 있는점 양해 부탁드립니다.

부족한 부분이나 개선사항은 언제든 환영입니다.

피드백은 겸허히 받겠습니다.


객체와 자료구조 본문 내용은 검색 해보면 많이 나온다.

난 이 챕터를 읽고 중요한 포인트와 의문점을 정리해 보았다. 즉, 모든 내용을 다루진 않는다.



해당 챕터의 가장 중요한 결론은

1. 객체는 동작을 공개하고 자료를 숨긴다 , 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.

2. 자료구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.


이말이 무슨뜻인지 확실히 이해하진 못했지만 글을 작성하며 생각을 정리하려 한다.


보통 이런 코드를 많이 사용한다.

나 또한 그렇다.


public class User {

private String name;
private String point;


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPoint() {
return point;
}

public void setPoint(String point) {
this.point = point;
}
}


클린코드 책에선 이런 물음을 던진다.

변수 name과 point는 접근지정자 private를 사용하고 있다.

근데 getter와 setting 로 외부에서 접근이 가능하다. 과연 이게 맞는걸까?


결론부터 말하자면 좋지않은 방법이라고 책에선 얘기한다.

이와 비슷하게 생긴 아래예제처럼 흔히 Bean 구조라 불리우는 자료전달객체(DTO) 사용하는데, 

디비또는 네트워크 통신을 할 때 유용하며, 많이 쓰인다.

일종의 사이비 캡슐화라고 부른다.


public class User {

public String name;
public String point;

public User(String name, String point) {
this.name = name;
this.point = point;
}


public String getName() {
return name;
}

public String getPoint() {
return point;
}
}



자 그러면 이걸 책에서는 어떻게 쓰라고 얘기를 하고 있을까?



"자료를 추상화하여 사용해라"


public interface UserInterface {

String getName();
String getPoint();
void setInfo(String name, String point);

}


좀 더 확실히 이해하고 싶어 예제를 찾아봤지만 모두 클린코드 책에 있는 좌표계 예제뿐이였다.

확실한건 웬만하면 추상화하여 사용하는것을 권장한다고 한다.


사실 내가 예제로 구현한 방법도 잘못됬으리라 생각한다.

책에는 "객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민하라

아무 생각없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다"고 적혀있다.


그외에도 많은 내용이 있지만 책에 있는 예제를 그대로 따라하는건 이미 많은 블로그에 존재하기 때문에 하고싶지 않았다.

난 이 지식을 가지고 활용해서 프로젝트에 적용을 천천히 해보려고 한다.


아직 100% 이해가 되지 않아 시간이 좀 걸리겠지만 천천히 진행해보려고 한다.

이번 내용은 나에겐 좀 어려운거 같다.








반응형
Comments