강의

멘토링

로드맵

BEST
개발 · 프로그래밍

/

개발 · 프로그래밍 기타

오브젝트 - 설계 원칙편

객체지향적인 코드를 작성하기 위해 알아야하는 다양한 설계 원칙들을 동작하는 코드를 중심으로 학습합니다.

(5.0) 수강평 28개

수강생 651명

  • 조영호

먼저 경험한 수강생들의 후기

이런 걸 배울 수 있어요

  • 객체지향 설계 원칙

  • 설계 원칙을 이용해서 코드의 문제점을 파악하는 방법

  • 리팩터링을 통해 코드를 진화시키는 방법

  • 테스트와 코드 품질 사이의 관계

객체지향 설계 원칙,
적용하는 방법 이해하기 🤔

오브젝트를 집필하면서 지면의 제약으로 인해 포함시키지 못하거나 충분히 설명하지 못한 주제들이 많은데, 그 중에서 가장 아쉬운 점이 설계 원칙에 대한 내용을 체계적으로 정리하지 못했다는 것입니다. 일부 설계 원칙들은 간단하게 언급하거나, 응집도, 결합도, 캡슐화 관점에서 원칙의 배경과 필요성을 설명하기는 했지만, 설계라는 문맥 안에서 다양한 원칙들을 연결하는 방법과 이 원칙들을 적용하는데 필요한 구체적인 가이드는 수록할 수가 없었습니다.

이런 부분을 보완하기 위해 오브젝트 - 설계 원칙편에서는 순수하게 설계 원칙에만 집중해서, 코드를 평가하고 개선할 때 설계 원칙들을 적용하는 실용적인 방법을 구체적인 코드 수준에서 설명합니다. 강의를 통해 설계 원칙을 기반으로 코드의 문제점을 파악하고 개선하는 방법을 학습하실 수 있습니다. 결과적으로 강의를 들으신 후에는 다양한 설계 원칙을 함께 버무려서 유지보수하기 쉬운 코드를 설계하는 방법을 이해하실 수 있습니다.

강의에서 다루는 설계 원칙은 다음과 같습니다.

  • 단일 추상화 수준 원칙(Single Level of Abstraction Principle, SLAP)

  • 단일 책임 원칙(Single Responsibility Principle, SRP)

  • 개방-폐쇄 원칙(Open-Closed Principle, OCP)

  • 리스코프 치환 원칙(Liskov Substitution Principle, LSP)

  • 의존성 역전 원칙(Dependency Inversion Principle, DIP)

  • 인터페이스 분리 원칙(Interface Segregation Principle, ISP)

  • 디미터 법칙(Law of Demeter, LoD)

  • 묻지말고 시켜라 원칙(Tell, Don't Ask, TDA)

  • 명령 쿼리 분리 원칙(Command Query Seperation, CQS)

  • 중복하지말라 원칙(Don't Repeat Yourself, DRY)


이런 내용을 배워요

설계 원칙의 개념과 필요성

모든 설계 원칙은 설계의 품질을 개선한다는 목적을 공유합니다. 하지만 각각의 설계 원칙의 세부적인 목표는 서로 다릅니다. 따라서 설계 원칙을 이해하는 출발점은 각각의 설계 원칙이 개선하려고 하는 목표를 이해하고, 현재의 코드를 그 목표에 맞게 개선하는게 적합한지를 판단하는 겁니다.

강의를 들으면 각 설계 원칙이 왜 필요하고 언제 유용한 지를 자연스럽게 이해할 수 있습니다.

설계 원칙을 적용하기 위한 구체적인 가이드

설계 원칙의 정의를 이해하는 것만으로는 부족합니다. 설계 원칙에서 가장 중요한 부분은 언제, 어떤 설계 원칙을 적용할 지 이해하고, 적절한 방식으로 설계 원칙을 적용하는 것입니다.

강의에서는 각각의 설계 원칙을 적용할 때 따를 수 있는 실용적인 가이드를 제시합니다. 이 가이드를 코드를 평가하고 개선할 때 사용할 수 있는 기준과 나침반으로 활용할 수 있습니다.

설계 원칙과 단위 테스트

테스트를 염두에 두면, 응집도가 높아지고, 결합도가 낮아지고, 변경을 캡슐화할 수 있는 설계를 얻을 수 있습니다. 그리고 설계 원칙을 고려해서 코드를 구현하면, 테스트를 작성하고 실행하기도 수월해 집니다.

강의에서는 각각의 설계 원칙이 테스트에 어떤 긍정적인 효과를 미치지는 지를 설명함으로써, 테스트와 설계 원칙 사이의 관계를 이해할 수 있도록 구성했습니다.

설계 원칙과 리팩터링

충분히 단순하면서 적절하게 유지보수 가능한 설계를 얻기 위해서는 지속적인 리팩터링이 필수입니다. 설계 원칙은 코드의 어디를 리팩터링하고, 어떤 목표로 리팩터링할 지에 대한 지침을 제공합니다.

강의에서는 예제 코드를 설계 원칙 관점에서 리팩터링하는 과정을 통해, 자연스럽게 설계 원칙을 이해할 수 있도록 구성했습니다.

4개의 구체적인 예제 코드

강의는 텍스트 어드벤처 게임, 게임 매출 관리 애플리케이션, 반복 일정 관리 애플리케이션, 통화 관리 시스템이라는 4개의 예제를 설계 원칙을 적용하면서 리팩터링하는 방식으로 진행됩니다.

강의를 들으시고나면 다양한 상황에서 다양한 설계 원칙을 적용하는 방법을 통해 설계 원칙, 리팩터링, 테스트 사이의 관계를 직관적으로 이해할 수 있게 됩니다.

설계 원칙을 종합적으로 적용하는 방법

설계 원칙은 독립적으로 사용되지 않습니다. 코드를 작성할 때는 다양한 설계 원칙을 종합적으로 적용하는게 일반적입니다. 그리고 하나의 설계 원칙을 따르기 위해서는 다른 설계 원칙도 함께 고려해야 합니다. 설계 원칙을 복합적으로 고려하면 다양한 상황에서 설계를 트레이드오프할 수 있는 능력히 향상됩니다.

강의에서는 연속적인 리팩터링을 통해 코드가 개선되는 과정을 보여주면서, 다양한 설계 원칙을 복합적으로 활용하는 방법을 학습할 수 있게 됩니다.

오브젝트 - 기초편과의 관계

오브젝트 - 설계 원칙편을 들으시기 위해 오브젝트 - 기초편을 먼저 들으실 필요는 없습니다. 오브젝트 기초편이 책임 주도 설계를 이용해서 유지보수 가능한 설계를 만드는 하향식 방식을 다룬다면, 오브젝트 설계원칙편은 코드를 유지보수 가능하게 리팩터링하는 상향식 방식을 다룹니다.


두 강의는 객체지향 설계를 서로 다른 관점에서 다루고 있기 때문에, 상호 의존적이지 않고 보완적인 관계를 가집니다. 따라서 어떤 순서로 강의를 봐도 상관이 없으며, 두 강의를 모두 본 후에는 객체지향에 대한 종합적인 시각을 얻을 수 있습니다.

이런 면에서 특별해요

📌언어에 독립적인 객체지향 설계 원칙을 설명합니다.

📌 예제는 자바로 구현되어 있지만 강의에서 제공하는 개념은 어떤 언어나 환경에서도 적용 가능합니다.

📌 핵심 내용들로 채워진 1400 페이지 분량의 슬라이드를 제공합니다.

📌 개념을 단순한 텍스트가 아닌 시각적인 그림으로 표현해서 내용을 이해하시기 쉽도록 구성했습니다.

📌 리팩토링 과정을 그림을 이용해서 전달하기 때문에 코드의 변경 과정을 쉽게 이해할 수 있습니다.

수강 전 참고 사항

학습 자료

  • 1400 페이지 분량의 강의 슬라이드가 PDF 형태로 제공됩니다.

  • 강의에서 사용하는 예제 코드는 깃허브에서 받아보실 수 있습니다.
    강의 별로 예제를 받기 불편하신 분들은 통합본을 받으시면 좀 더 쾌적하게 학습하실 수 있습니다.

선수 지식 및 유의사항

  • 예제 코드가 자바로 작성되어 있기 때문에 자바의 기본 문법을 알고 계셔야 원활한 학습이 가능합니다.

  • 최대한 기본적인 JDK만 사용해서 강의를 작성했지만, 일부 예제에서는 JSON 파싱을 위한

    Jackson 라이브러리, 인메모리 레디스 지원을 위한 embedded-redis 라이브러리

    , 레디스 자바 클라이언트 Jedis 라이브러리

    , GUI 애플리케이션 개발을 위한 Swing 프레이임워크를 사용하는 부분이 포함되어 있습니다.
    이 라이브러리들을 모르시더라도, 핵심 원칙들을 학습하시는데는 무리가 없도록 구성했습니다.


  • 단위 테스트 라이브러리로 JunitAssertJ를 사용합니다.

이런 분들께
추천드려요

학습 대상은
누구일까요?

  • 객체지향 설계 원칙의 개념과 적용 방법이 궁금하신 분들

  • 객체지향 개념을 코드에 적용하는데 어려움을 느끼시는 분들

  • 좋은 코드를 설계하기 위한 기본적인 원칙과 가이드가 필요하신 분들

선수 지식,
필요할까요?

  • 자바 기본 문법

  • 객체지향 언어를 이용해서 코드를 작성해본 경험

안녕하세요
입니다.

2,229

수강생

120

수강평

78

답변

5.0

강의 평점

2

강의

객체지향 설계와 도메인-주도 설계에 관심이 많으며 행복한 팀과 깔끔한 코드, 존중과 협력이 훌륭한 소프트웨어를 낳는다는 믿음을 가지고 있는 평범한 개발자입니다. 개발자, 교육자, 관리자를 오가며 익힌 다양한 경험을 바탕으로 좋은 코드와 함께 좋은 프로덕트를 만들기 위해 노력하고 있습니다.

저서로는 『객체지향의 사실과 오해』와 『오브젝트』가 있고 번역서로는 『엘레강트 오브젝트』가 있으며 『만들면서 배우는 클린 아키텍처』에 감수자로 참여했습니다.

💡개인블로그 : https://eternity-object.tistory.com/

 

커리큘럼

전체

33개 ∙ (6시간 16분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

전체

28개

5.0

28개의 수강평

  • choiseonmun님의 프로필 이미지
    choiseonmun

    수강평 14

    평균 평점 4.9

    5

    100% 수강 후 작성

    첫 수강평을 남기게 되어 영광이네요. <오브젝트 - 기초편> 이후 바로 <오브젝트 - 설계원칙>편까지 모두 수강하고 수강평을 작성합니다. 강의의 장점이라 한다면 아래와 같습니다. 1. 원칙만 나열하는 것이 아닌 실제 코드 예시가 있기에 직관적으로 이해할 수 있습니다. ㄴ SOLID 원칙은 자주 접하기에 알고 있다고 생각했는데 강의를 보니 저의 착각이라는 걸 알 수 있었습니다. 2. <오브젝트 - 기초편>보다 편의성이 증가되었습니다. ㄴ 수업 자료를 통해 관련 레포 링크가 제공되어 접근하기 편합니다. ㄴ 지식공유자님이 사라지셔서 프리젠테이션을 보기가 한결 좋아졌습니다. 다소 아쉬운 부분도 존재합니다. (사소합니다.) 1. 영상마다 볼륨 수준이 달라 약간 신경이 쓰입니다. 2. 영상에 오류가 있는 경우도 있습니다. 3. '되게 됩니다.' 같은 구어체 말투가 정돈되면 더 깔끔할 것 같습니다. 4. 외래어 표기법이 다른 경우가 있는데(e.g. 메서드/메소드) 이 부분도 통일되면 좀 더 깔끔할 것 같습니다. <오브젝트 - 기초편>도 꼭 보는 것을 추천합니다. 더 폭 넓게 강의를 이해할 수 있습니다. 객체지향 설계가 무엇인지 모른다면 본 강의를 강력 추천합니다. 제 주변에도 많이 추천할 예정입니다 ㅎㅎ 좋은 강의를 기획해주신 조영호님께 감사드립니다. 앞으로 제 코드가 많이 달라질 것이 기대됩니다. 적게 일하고 많이 버세요 ㅎㅎㅎ

    • 조영호
      지식공유자

      choiseonmun님 최근에 오브젝트 - 기초편에 수강평을 남겨주신게 기억이 나는데 벌써 완강하셨군요. 완강 축하드리고 수강평 남겨 주셔서 감사합니다. :) 강의가 도움이 되셨다니 다행입니다. 제 얼굴은 많은 지인분들의 요청으로 빼기로 했는데 반응이 좋아서... 다행이네요. 건강 상의 이유로 촬영 기간이 길어지면서 볼륨이 조금씩 다른 문제가 발생했는데 불편하다는 분들이 계시면 향후에 오브젝트 - 기초편과 함께 재녹음을 해보는 것도 고려해 볼게요. :) 혼자 강의 제작, 촬영, 편집을 하고 있는데 이번 강의는 발표자료가 생각보다 많아져서 중간중간 체크한다고 했는데 인지하지 못한 부분이 있나보네요. 이 부분은 꼼꼼하게 체크하지 못하고 출시한 점 죄송하다는 말씀 드립니다. 저도 한번 다시 점검하면서 최대한 빨리 수정하겠습니다. :) 혹시 편하실 때 영상에 오류나 장표의 일관성 부분 제보해 주시면 최대한 빠르게 수정해서 업데이트하겠습니다. 적게 일하고 많이 벌자는 말이 마음에 와닿네요. 강의가 유지보수에 드는 비용을 줄이고 코드 품질을 높이시는데 도움이 되면 좋겠네요. 감사합니다!

  • orc님의 프로필 이미지
    orc

    수강평 1

    평균 평점 5.0

    5

    100% 수강 후 작성

    감사합니다. 감사합니다. 정말 감사합니다. 내 인생 통틀어 최고의 강의. 처음으로 수강평 남깁니다. 정말 잘 들었습니다. 다음 강의 계획중이신게 있나요?

    • 조영호
      지식공유자

      orc님 좋은 수강평 남겨 주셔서 정말 감사드립니다. 강의 끝까지 들어주시고 수강평까지 남겨주셨는데 제가 더 감사하죠. 이번 강의 만들 때 이런저런 일로 마음 고생이 많았는데 최고의 강의라는 평을 듣고나니 고생이 싹 가시는것 같네요. 다시 한번 감사드립니다. 아직 최종 결정은 하지 못했지만 다음 강의는 의존성 관리, 디자인 패턴, 단위 테스트 중에서 한 가지 주제로 만들어볼 계획을 잡고 있습니다. 현재 기준으로는 기초편과 설계 원칙편과 이어지는 의존성 관리편을 만드는 것으로 생각하고 있습니다. 다음 강의까지 관심 가져주셔서 감사드리고 행복한 나날 보내세요!

  • Byung-mo Kim님의 프로필 이미지
    Byung-mo Kim

    수강평 3

    평균 평점 5.0

    5

    30% 수강 후 작성

    영화를 보는것 처럼 흥미진진하게, 설계에 대한 이야기가 이어지네요~ 계속 잘 들어보겠습니다~ 좋은 강의 감사합니다 bb

    • 조영호
      지식공유자

      Byung-mo Kim님 수강평 남겨 주셔서 감사합니다. 예제를 개선시키면서 설계 원칙을 적용해 나가는 흐름으로 구성했는데, 재미있게 보고 계신가 보네요. :) 뒷부분으로 가면서 난이도가 조금 올라가지만 더 재미있는 내용들이 기다리고 있으니까 꼭 완강하시기 바랍니다. 궁금한 부분이나 수정할 부분 있으면 언제라도 문의주시구요. 불금 보내시고 행복한 나날 보내세요.

  • 김철준님의 프로필 이미지
    김철준

    수강평 2

    평균 평점 5.0

    5

    82% 수강 후 작성

    강의 내용은 좋고, 질문답변에도 다이어그램까지 그려가주시면서 이해시켜주시려고 해주시는 점에 감동받았습니다! 너무 좋은 강의에 감사드립니다. 다만, 라이브코딩으로 진행하지 않기 때문에 수강생이 불필요한 에너지 소모가 발생하는 점이 아쉽습니다. 강의를 보며 느꼈던 라이브코딩이 아니어서 에너지 소모가 발생하는 점은 아래와 같았습니다. 1. ppt나 자료에서 예상치 못한 코드 누락이 발생하는 점. 라이브코딩이었다면 IDE에서 에러를 잡아주기 때문에 문제가 없었을 것 같습니다. 2. 강의 중간에 변화되는 메서드는 보여주셨지만 생성자는 어떻게 변하는지 궁금해 코드를 보면서 하려고 했으나, 제공된 코드는 해당 회차 종료 시점의 완성된 코드이므로 코드가 다릅니다. 3. 코드의 패키지를 나누는 것에 대한 내용이 생략되고 완성 코드에만 나와있습니다. 눈으로 보기만 하며 이해하는 수강생들의 입장은 모르겠지만, 코드를 쳐가면서 강의를 듣는 입장에서는 이런 점들이 불편했습니다. 다회차로 복습으로 들을 때는 괜찮지만, 강의를 이해하는 것 이외에 에너지 소모가 된다는 점이 아쉬웠습니다. 한 마디로 vod 강의의 이점을 이용하시기보다는 좋은 책을 쓰시고 읽어준다는 느낌이었습니다. 하지만 강의 내용 자체는 훌륭했으므로 좋은 강의를 제공해주신 강사님께 감사드립니다.

    • 조영호
      지식공유자

      김철준님 안녕하세요. 좋은 수강평 남겨주셔서 감사합니다. 강의자료 한장 한장 만드는게 너무 힘들었는데 높게 평가해주셔서 감사합니다. 🙂 오랜 기간 강의를 하다보면 수강생분들마나 취향이 다양하다는 걸 느낄 수 있습니다. 오프라인 강의를 선호하시는 분도 계시고, 온라인 강의를 선호하시는 분도 계시고, 라이브 코딩 대신 강의식을 선호하시는 분도 계십니다. 따라서 수강생분들은 강의를 선택하실 때는 개인의 취향에 따라 적절한 강의를 선택하시는게 중요하고 강사는 개인마다 다른 취향과 강의에 적합한 포맷을 선택하는 것 사이에서 고민하게 됩니다. 객체지향 - 설계 원칙의 핵심은 코드가 아니라 매순간 개발자가 어떤 기준에 따라 사고하고 어떻게 트레이드오프를 하는지를 전달하는게 목적입니다. 그리고 설계는 클래스 하나, 메서드 하나 단위로 이루어지기 보다는 하나 이상의 클래스에 걸친 책임의 분배와 의존성의 관리가 핵심입니다. 여기에서 라이브 코딩의 문제는 한 시점에 수강생분들의 시야를 하나의 클래스, 또는 하나의 메서드로만 제한한다는 점입니다. 따라서 설계를 논하기 위해서는 가급적이면 다수의 클래스에 대한 변화와 관계를 시각적으로 보여주는게 훨씬 유용하죠. 함께 수정되는 클래스가 많아지면 많아질 수록 수강평에서 말씀하신 라이브코딩으로 진행하지 않기 때문에 발생하는 불필요한 에너지 소모보다 중간 중간 코드의 변화에 따라 어떤 클래스가 어떻게 영향을 받는지 전체적인 구조를 파악하는 에너지가 훨씬 더 커지게 되는거죠. 따라서 수강생분들이 설계의 흐름을 이해하시는데 들어가는 에너지를 줄일 수 있는 방식으로 강의를 구성했다고 보시면 좋을것 같습니다. 말씀하신 단점보다 이 장점이 훨씬 크기 때문에 현재의 방식을 선택했습니다. 🙂 앞에서 말씀드린 것처럼 사람마다 취향이 다르고 아마도 김철준님의 경우에는 처음부터 끝까지 라이브 코딩으로 진행되는 강의에 익숙하시고 취향에 맞으시는 것 같아요. 제 강의도 오브젝트 - 기초편처럼 라이브 코딩이 추가되기도 하겠지만 설계가 주제인 경우라면 현재의 포맷을 중심으로 두고 라이브 코딩을 추가하는 방식이 될 예정입니다. 강의 방식에 대한 소중한 의견 주신 점은 감사드립니다. 앞으로도 더 나은 강의를 위해 고민해보겠습니다. 현재 방식이 김철준님의 학습 스타일과 완전히 맞지 않더라도, 설계 원칙 자체는 분명 도움이 되실 거라 생각해요. 혹시 라이브코딩 방식에 더 익숙하시다면, 보완적으로 그런 강의들도 함께 들어보시는 것도 좋은 방법일 것 같아요. 행복한 한 주 시작하시고 항상 성장하시는 나날 되세요!

  • soljie74님의 프로필 이미지
    soljie74

    수강평 2

    평균 평점 5.0

    수정됨

    5

    100% 수강 후 작성

    기초편에 이어 객체지향에 관한한 최고의 강의 같습니다. 개념부터 예제까지 짜임새 있는 내용들로 구성되어 있어 아주 충실합니다.

    • 조영호
      지식공유자

      soljie74님 수강평 남겨주셔서 감사드립니다. 오브젝트 - 기초편에서 객체지향적인 코드를 작성할 수 있는 방법을 설명했다면, 오브젝트 - 설계 원칙편에서는 객체지향적인 설계로 개선할 수 있는 방법을 설명하려고 노력했는데 도움이 되셨다니 다행이네요. 궁금한 부분이나 수정할 부분 있으면 언제라도 문의주세요. 완강 축하드리고 주말 잘 마무리하세요!

2025 추석맞이 감사할인 중

월 ₩16,500

5개월 할부 시

25%

₩110,000

₩82,500

조영호님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!