새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
TIL) 드디어 getter와 setter의 문제를 조금 알았다.
📌 2025-03-03 TIL
1. 오늘의 학습 주제
- 객체지향 프로그래밍에서 말하는 외부 세계, 내부 세계
- 왜 getter 와 setter 를 사용하지 말라는지 알게 되었다.
- 사용자에게 전해지는 UI는 메서드다.
2. 오늘의 학습 내용
실제 업무를 하다보니 코드를 작성하는 시간보다 다른 사람이 작성하거나 제가 예전에 작성한 코드를 보는 시간이 많습니다.
클린코드, 리팩토링 등 메서드에는 하나의 기능만 있어야하며..
여러가지 상황 설명과 예시 코드를 보여주며 설명을 해주었지만 잘 이해가 되지 않았습니다.
제가 생각하는 객체지향 프로그래밍은 사용자와 주방 가전의 관계를 만드는 거라고 생각합니다.
사용자는 빨래를 세탁하기 위해서 통돌이 세탁기, 드럼 세탁기, 코인 세탁기, 집 근처 세탁소, 손 세탁등 상황에 따라 선택할 수 있습니다. 코드로 보면 이렇게 작성할 수 있을 거같습니다.
class 나 {
private String 빨래량;
private List<세탁> 세탁방식들;
public 빨래를_한다(){
if(!"많다".equals(this.빨래량)){
return;
}
세탁 세탁방식 = bestCandidate세탁(빨래타입);
세탁방식.워시(빨래)
}
}
제가 사용할 수 있는 세탁 방식들은 계속 추가될 수 있습니다.
제가 직접 의존하는 것이 아니라 “더러워진 의류를 세탁해주는” 만 의존하기 때문에 언제든지 자유롭게 선택해서 세탁이 가능합니다.
객체지향에서 말하는 외부,내부세계
제가 세탁기를 사용할 때 세탁기의 동작 방식을 세세하게 알지 못합니다.
세탁기를 돌리기 위해서 필요한 것은 세제, 섬유유연제, 전기, 물, 섬유 향균제 입니다.
세탁을할수있는.세탁("전기","물","세제",List.of("섬유유연제","섬유향균제"))
세탁기를 돌리기 위해서 필요한 정보만 사용자에게 명확하게 전달해 준다면 사용자는 메뉴얼을 읽지 않아도 돌릴 수 있습니다.
제가 생각하는 외부 세계와 내부 세계는 그런 관계라고 생각이 듭니다.
내부 세계와 외부 세계를 연결해주는 인터페이스, 메서드, 파라미터 이름, 파라미터 타입이 주는 정보가 명확할 수록 사용자는 불필요한 생각이 필요없어지고 가독성이 좋아진다고 생각합니다.
만약 세탁기 세제를 넣는 칸이 구분되어 있지 않고 아무 순서에 대한 설명도 없다고 보면 사용하기 어렵게 되며 결국은 내부 메뉴얼을 봐야합니다.
세탁을할수있는.세탁(String 첫번째 칸,String 두번째 칸,String 세번째 칸)
만약 이게 아니라 명확하게 타입과 파라미터 명으로 제공한다면 사용자는 메서드 시그니처만 봐도 알 수 있습니다.
세탁을할수있는.세탁(세제 세제,유연제 섬유유연제,보조세제 세제)
어디에 넣어야하는지 가독성이 좋아지는 거라고 생각이 듭니다.
getter와 setter를 왜 안쓰는지 이해가 되었다.
객체지향 프로그래밍은 사용자와 생활 가전이라고 생각하면 이해가 잘 됩니다.
사용자가 세탁기를 돌리기 위해서 두 가지 방식이 있다고 생각해보면서 이해를 햇습니다.
세탁기.set전원설정(1).set세탁종류(1).set행굼횟수(3).set탈수설정(12,'분');
세탁기.on();
세탁기.run(일반세탁);
개발자는 만들어져있으면 사용하게 됩니다.
이렇게 오브젝트가 외부세계에서 제공하는 기능으로 메세지를 전달하여 기능을 실행하면 내부 상태를 사용자는 몰라도 됩니다.
그런데 setter, getter를 만들게 되면 이게 내부 설정까지 들여다보는 상황이라고 생각합니다.
불필요한 정보를 사용자에게 주는 것은 가독성도 떨어지며, 유지보수도 어렵게 만든다고 생각합니다.
댓글남기기