강의

멘토링

커뮤니티

BEST
개발 · 프로그래밍

/

개발 · 프로그래밍 기타

오브젝트 - 설계 원칙편

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

(5.0) 수강평 39개

수강생 747명

  • 조영호

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

수강 후 이런걸 얻을 수 있어요

  • 객체지향 설계 원칙

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

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

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

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

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

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

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

  • 단일 추상화 수준 원칙(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,420

수강생

154

수강평

100

답변

5.0

강의 평점

2

강의

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

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

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

 

커리큘럼

전체

33개 ∙ (6시간 16분)

해당 강의에서 제공:

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

수강평

전체

39개

5.0

39개의 수강평

  • haedallog님의 프로필 이미지
    haedallog

    수강평 16

    평균 평점 4.9

    5

    100% 수강 후 작성

    Thật vinh dự khi được để lại đánh giá đầu tiên. Tôi đã hoàn thành cả khóa học <오브젝트 - 기초편> và ngay sau đó là <오브젝트 - 설계원칙> rồi mới viết đánh giá này. Ưu điểm của khóa học là như sau: 1. Không chỉ liệt kê nguyên tắc mà còn có ví dụ code thực tế, giúp hiểu một cách trực quan. ㄴ Tôi cứ nghĩ mình đã hiểu nguyên tắc SOLID vì thường xuyên tiếp xúc, nhưng xem bài giảng mới biết đó là sự nhầm lẫn của tôi. 2. Tiện ích đã tăng lên so với <오브젝트 - 기초편>. ㄴ Tài liệu học tập cung cấp link repo liên quan, tiện lợi để truy cập. ㄴ Hình ảnh người chia sẻ kiến thức không còn hiển thị, giúp việc xem slide thuyết trình dễ dàng hơn nhiều. Cũng có một vài điểm hơi tiếc. (Nhỏ thôi.) 1. Mức âm lượng khác nhau giữa các video, hơi gây khó chịu. 2. Đôi khi video có lỗi. 3. Nếu các cách diễn đạt khẩu ngữ như '되게 됩니다.' được chỉnh sửa sẽ gọn gàng hơn. 4. Có trường hợp cách viết từ mượn khác nhau (e.g. 메서드/메소드), nếu phần này được thống nhất sẽ gọn gàng hơn. Tôi cũng rất khuyến khích xem <오브젝트 - 기초편>. Bạn sẽ hiểu bài giảng một cách rộng hơn. Nếu bạn không biết thiết kế hướng đối tượng là gì, tôi mạnh mẽ giới thiệu khóa học này. Tôi dự định sẽ giới thiệu cho nhiều người xung quanh mình nữa 😊😊 Cảm ơn anh Jo Young-ho đã tạo ra khóa học tuyệt vời này. Tôi mong đợi code của mình sẽ thay đổi rất nhiều trong tương lai. Chúc anh làm ít hưởng nhiều nhé 😊😊😊

    • eternity
      지식공유자

      Chào choiseonmun, tôi nhớ gần đây bạn đã để lại nhận xét về khóa học "오브젝트 - 기초편", vậy mà bạn đã hoàn thành khóa học rồi. Chúc mừng bạn đã hoàn thành khóa học và cảm ơn bạn đã để lại nhận xét. :) May quá khóa học đã giúp ích cho bạn. Ban đầu tôi định bỏ phần hình ảnh của mình theo yêu cầu của nhiều người quen, nhưng phản ứng tốt... thật may. Do vấn đề sức khỏe, thời gian quay phim kéo dài nên xảy ra vấn đề âm lượng hơi khác nhau. Nếu có ai cảm thấy khó chịu, tôi sẽ xem xét ghi âm lại cùng với "오브젝트 - 기초편" trong tương lai. :) Tôi tự mình làm hết từ sản xuất, quay phim đến chỉnh sửa khóa học, nhưng lần này tài liệu trình bày nhiều hơn tôi nghĩ. Dù tôi đã kiểm tra kỹ lưỡng ở giữa các phần, có vẻ như vẫn có những điểm tôi không nhận ra. Về phần này, tôi xin lỗi vì đã không kiểm tra kỹ lưỡng trước khi phát hành. Tôi cũng sẽ xem xét lại một lần nữa và sửa lỗi nhanh nhất có thể. :) Nếu tiện, nếu bạn báo lỗi về video hoặc sự nhất quán của các slide, tôi sẽ sửa và cập nhật nhanh nhất có thể. Câu nói "Làm ít, kiếm nhiều" thật sự thấm thía trong lòng tôi. Tôi hy vọng khóa học sẽ giúp bạn giảm chi phí bảo trì và nâng cao chất lượng mã code. Xin cảm ơn!

  • 개발인생님의 프로필 이미지
    개발인생

    수강평 2

    평균 평점 5.0

    5

    100% 수강 후 작성

    Tôi đã nghe bài giảng rất thú vị. Tôi cứ nghĩ mình đã hiểu rõ các nguyên tắc thiết kế, nhưng thật ngạc nhiên là có nhiều điều tôi đã hiểu sai. Nhờ giảng giải bằng code mà tôi có thể hiểu dễ dàng. Trước đây tôi không biết phải refactoring code như thế nào, nhưng sau khi nghe giảng, tôi đã có thể đặt ra một số tiêu chuẩn rõ ràng. Cảm ơn vì đã tạo ra một bài giảng hay!

    • eternity
      지식공유자

      Cảm ơn bạn 개발인생 đã để lại đánh giá khóa học. Tôi đã sắp xếp các nguyên tắc thiết kế sao cho có thể áp dụng khi viết mã thực tế, thật may là nó đã hữu ích cho bạn. :) Nếu có bất cứ điều gì thắc mắc, hãy cứ để lại câu hỏi bất cứ lúc nào nhé! Chúc mừng bạn đã hoàn thành khóa học và chúc bạn có một tuần mới hạnh phúc.

  • enciel02028311님의 프로필 이미지
    enciel02028311

    수강평 3

    평균 평점 5.0

    5

    30% 수강 후 작성

    Thú vị như xem phim vậy, câu chuyện về thiết kế cứ thế tiếp diễn~ Em sẽ tiếp tục nghe kỹ ạ~ Cảm ơn vì bài giảng rất hay bb

    • eternity
      지식공유자

      Cảm ơn bạn Byung-mo Kim đã để lại đánh giá khóa học. Khóa học được xây dựng theo luồng áp dụng các nguyên tắc thiết kế trong khi cải thiện các ví dụ, có vẻ bạn đang theo dõi một cách thú vị nhỉ. :) Độ khó sẽ tăng lên một chút ở phần sau, nhưng còn nhiều nội dung thú vị hơn đang chờ đợi, nên bạn hãy cố gắng hoàn thành khóa học nhé. Nếu có phần nào thắc mắc hoặc cần chỉnh sửa, hãy liên hệ bất cứ lúc nào nhé. Chúc bạn có một buổi tối Thứ Sáu tuyệt vời và những ngày hạnh phúc.

  • soljie742878님의 프로필 이미지
    soljie742878

    수강평 2

    평균 평점 5.0

    수정됨

    5

    100% 수강 후 작성

    Tiếp theo phần cơ bản, đây dường như là khóa học tốt nhất về lập trình hướng đối tượng. Nội dung rất đầy đủ, được cấu trúc chặt chẽ từ khái niệm đến ví dụ.

    • eternity
      지식공유자

      Cảm ơn soljie74 đã để lại đánh giá khóa học. Nếu khóa 'Object - Cơ bản' giải thích cách viết code hướng đối tượng, thì khóa 'Object - Nguyên tắc thiết kế' đã cố gắng giải thích cách cải thiện bằng thiết kế hướng đối tượng, và thật may mắn khi khóa học đã giúp ích cho bạn. Nếu có bất kỳ phần nào thắc mắc hoặc cần chỉnh sửa, hãy liên hệ bất cứ lúc nào nhé. Chúc mừng bạn đã hoàn thành khóa học và chúc bạn cuối tuần vui vẻ!

  • chrispark님의 프로필 이미지
    chrispark

    수강평 6

    평균 평점 5.0

    5

    100% 수강 후 작성

    Đây là bài giảng tuyệt vời về cốt lõi và nền tảng của phát triển hướng đối tượng~ Có thể nói rằng việc phát triển khi biết những nguyên tắc này và khi không biết thì khác nhau như trời với đất. Nếu bạn đang phát triển mà không biết những nguyên tắc này thì dù sớm hay muộn bạn cũng sẽ nhận ra rằng mình đang viết spaghetti code~!! :) Hôm nay cũng cố gắng để tạo ra code dễ bảo trì nhé~ 😊

    • eternity
      지식공유자

      Cảm ơn anh Chrispak đã để lại đánh giá khóa học. Như anh đã nói, hy vọng nhiều người sẽ viết code sạch dựa trên các nguyên tắc thiết kế. Cảm ơn anh rất rất nhiều vì đã hài lòng với khóa học và tôi sẽ chuẩn bị chăm chỉ cho khóa học tiếp theo! Chúc anh có cuối tuần vui vẻ. :)

2025 블랙 프라이데이 깜짝 연장 할인 중 (20:20:51 남음)

월 ₩346,510

5개월 할부 시

24%

₩110,000

₩1,732,550

조영호님의 다른 강의

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

비슷한 강의

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