본문 바로가기
우아한테크코스/레벨 0

[레벨 0] 3주차 학습 기록 및 회고

by aksworns22 2026. 2. 9.

3주차 학습을 마무리 하면서

3학년 여름방학에 원하던 교육 프로그램에 지원했지만 아쉽게도 합격하지 못했습니다. 왜 떨어졌는지 스스로 돌아보며 고민한 끝에, 제 문제점 중 하나는 객체지향에 대한 고민이 부족했다는 점이라고 생각했습니다. 이를 계기로 객체지향사고프로세스라는 책을 읽게되었습니다. 책에서 특히 인상 깊었던 문장은 상속보다 합성을 사용하라는 내용이었습니다. 저는 아무런 고민없이 책의 내용을 근거로 합성은 새로운 도구고 상속은 사라져가는 피해야 할 도구라고 단정지었습니다. 

 

하지만 최근 첫 안드로이드 프로젝트를 진행하며 상속은 나쁘다는 제 생각에 의심이 들기 시작했습니다. 리사이클러뷰를 사용하기위해 필요한 어댑터가 추상 클래스로 만들어져 있었기 때문입니다. 이를 보면서 왜 상속이 필요한 추상 클래스를 사용한걸까, 왜 추상클래스가 나쁘다는 말은 못들어봤을까, 정말 상속은 나쁜 것일까? 등 여러 질문들이 떠올랐습니다.

 

3주차 학습에서 의문을 해결하기 위해 글을 찾아보던 중 Composition vs. Inheritance: How to Choose?를 읽게 되었고, 다음 문장이 기억에 남습니다.

it is far too easy for people to hear the slogan without understanding its source or context, and thus avoid thinking for themselves

 

유명한 슬로건에 기대어 생각을 멈추고 상속은 나쁘다고 단정지었던 제 모습이 떠올랐습니다. 돌아보면 정말 문제였던 것은 상속이 아니라 아무 생각 없이 상속은 피해야한다고 여기며 깊이 고민하지 않으려 했던 제 학습 태도였던 것 같습니다. 앞으로의 학습은 조금 더 맥락과 근거를 고민하려고 노력해야겠습니다.


금요일(02.13)

Fact(배운 것)

Finding(알게된 것)

1. 템플릿 메서드 패턴과 제어권의 역전

리사이클러뷰의 어댑터가 템플릿 메서드 패턴을 사용하는 것이 아닐까 추측해보았습니다. 이 패턴에서 중요한 점은 부모가 제어권을 가지고 하위 클래스가 필요에 따라 구현을 제공한다는 제어권의 역전이 핵심임을 알 수 있었습니다.

Feeling(느낌)

Composition vs. Inheritance 글을 완전히 이해했다고는 할 수 없지만, 제가 느낀 핵심은 상속은 단순한 코드 재사용보다 계층 구조를 통해 전체적인 개념을 조직하고 큰 그림을 이해하기 쉽게 만드는 데 장점이 있다는 점입니다. 내용이 다소 어려워서 다시 한번 차근차근 읽어보며 정리할 필요가 있을 것 같습니다.


토요일(02.14)

Fact(배운 것)

Finding(알게된 것)

1. 결합도와 캡슐화

결합도는 단순히 객체가 서로를 참조하고 있는지가 아니라 상대 객체(혹은 서로)의 내부 구현을 얼마나 알고 있는지가 더 중요한 것 같습니다. 결합도가 높아지면 A를 이야기하다가 자연스럽게 B의 내부 구현까지 함께 설명하게 되는 경우가 생깁니다. 이는 코드의 흐름을 끊고 읽기 어려운 코드를 만든다고 느꼈습니다. 또한 각 객체의 구현이 서로에게 많이 노출되어 있을수록 한 객체의 변화가 다른 객체에 큰 영향을 주게 되고 그로 인해 수정의 파급 효과가 발생한다고 이해했습니다. 이 내용을 고민하면서 객체지향의 4대 속성 중에서 그동안 상대적으로 중요하지 않게 여겼던 캡슐화를 다시 생각해보게 되었습니다. 캡슐화는 단순히 접근 제한자를 사용하는 기술이 아니라 객체의 내부 구현을 감추어 변경의 영향을 줄이는 중요한 설계 원칙이었습니다. 더 나아가 디미터 법칙과 Tell, Don't Ask 원칙이 캡슐화를 지키기 위한 노력 중 하나라는 생각을 해볼 수 있었습니다.

 

2. 함수 선언과 원시값 포장

함수 선언과 같은 공개 인터페이스의 변화를 최소화하는 것이 중요하다고 생각했습니다. 함수 선언이 변경되면 의존하고 있는 코드 전반에 수정이 필요하기 때문입니다. 원시값 포장은 코드를 쉽게 이해할 수 있게 해준다는 장점도 있지만 그에 더해 공개 인터페이스의 변화를 줄이는 데 매우 유용하다는 생각이 들었습니다. 의미 있는 객체로 값을 감싸두면 내부 타입이 바뀌더라도 함수 선언 자체는 유지할 수 있기 때문입니다.

Feeling(느낌)

여전히 애매한 부분이 많다고 느꼈습니다. 결합도에서 말하는 세부 사항(구현)은 어디까지를 의미하는지, 응집도에서 말하는 하나의 책임은 어디까지를 하나로 보아야 하는지 명확하게 구분하기가 어렵게 느껴졌습니다. 앞으로 구현의 범위와 책임의 범위를 판단하는 연습을 해야할 것 같습니다.


 월요일(02.16)

Feedback(피드백)

  • 이번 학습에서 배운 것은 많았지만, 정말 적용할 수 있을지, 제대로 이해했는지 확신이 서지 않습니다. 나중에 다시 한번 읽고 곱씹으며 고민해볼 필요가 있을 것 같습니다.
  • 생각보다 진도를 많이 나가지 못했는데 다음 주에는 책에 좀 더 집중하여 4장과 어노테이션/리플렉션 파트를 학습하려고 합니다.

Future(계획)

  • 레벨 0에서 중요하게 생각한 목표인 어노테이션과 리플렉션 학습을 우선한 후 차근차근 4장부터 다시 학습을 이어갈 계획입니다.