/// <summary>
/// Nomad Coder - 클린코드 챌린지 - 10 / 21
/// @author : CloudD
/// @last update : 2025. 06. 01.
/// @update
/// - 2025. 06. 01 : 최초 작성. (6장. 객체와 자료 구조)
/// </summary>
/// Nomad Coder - 클린코드 챌린지 - 10 / 21
/// @author : CloudD
/// @last update : 2025. 06. 01.
/// @update
/// - 2025. 06. 01 : 최초 작성. (6장. 객체와 자료 구조)
/// </summary>
오늘은 6장 "객체와 자료 구조" 를 읽었습니다.
짧은 장이지만 인상 깊은 내용들이 많았고, 그 중 기억해 두고 싶은 부분들을 정리해 보았습니다.
서문
작가는 이 장의 서두에서 이런 질문을 합니다.
“변수를 비공개로 정의하는 이유는 남들이 변수에 의존하지 않게 만들고 싶어서이다.
그렇다면 어째서 수많은 프로그래머가 조회(get) 함수와 설정(set) 함수를 당연하게 공개해(public) 비공개 변수를 외부에 노출할까?”
그렇다면 어째서 수많은 프로그래머가 조회(get) 함수와 설정(set) 함수를 당연하게 공개해(public) 비공개 변수를 외부에 노출할까?”
객체지향을 배우면서 저도 늘 의문을 가졌던 부분입니다.
'캡슐화' 를 이유로 get(), set() 을 만들었지만, 이는 결국 변수를 public 으로 만드는 것과 다를 바 없다고 느꼈습니다.
물론 get(), set() 내부에 예외 처리가 추가 로직을 넣을 수도 있지만, 아무 고민 없이 습관적으로 추가하는 것은 의미 없는 포장이라고 생각합니다.
저 역시 과거에 생각 없이 get(), set() 을 코드에 넣었던 적이 있습니다.
그저 습관적으로 추가하기 전에, 코드 구현에 대해 더 많이 더 깊이 고민해야겠다는 생각을 다시 한번 하게 되었습니다.
작가도 분명하게 말합니다.
아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.
자료 객체 비대칭
객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 외부에 공개합니다.
자료 구조는 자료는 그대로 노출하고, 별다른 함수는 제공하지 않습니다.
객체와 자료 구조는 근본적으로 서로 다릅니다.
언제 객체를 사용하고, 언제 자료 구조를 사용해야 하는가는 문제에 따라 달라질 수 있습니다.
작가는 이렇게 정리합니다.
- 새로운 자료 타입이 필요한 경우엔 클래스와 객체 지향 기법이 적합하다.
- 새로운 함수가 필요한 경우엔 자료 구조와 절차적인 코드가 적합하다.
문제가 다양하면 해결 방법도 다양합니다.
이 장을 읽으며, 'OOP 가 늘 정답은 아닐 수도 있다.' 는 생각을 하게 됩니다.
소감
작가가 이 장의 끝에 남긴 결론을 인용하며 오늘의 글을 마무리합니다.
새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다.
새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다.
우수한 소프트웨어 개발자는 편견 없이 이 사실을 이해해 직면한 문제에 최적인 해결책을 선택한다.
'나는 아직도 갈 길이 멀구나.' 하고 한숨을 내쉬었습니다.
연차가 쌓일수록, 이런 한숨은 오히려 더 많아지는 것 같습니다.
그래도 이렇게 공부를 할 때마다, 아주 조금씩은 성장하고 있는 것 같아서 다행입니다.
내일은 오늘보다 조금 더 낫겠지...
라는 작디 작은 희망도 함께 품어 봅니다.