Inflearn brand logo image
Inflearn brand logo image
Inflearn brand logo image
BEST
Programming

/

etc. (Programming)

Object - Design Principles

Learn various design principles needed to write object-oriented code, focusing on working code.

(5.0) 23 reviews

589 learners

  • eternity
oop
Software Test
software-design

Reviews from Early Learners

What you will learn!

  • Object-Oriented Design Principles

  • Identifying code problems using design principles

  • How to evolve code through refactoring

  • Relationship between Tests and Code Quality

Object-oriented design principles,
Understand how to apply 🤔

While writing Object , there were many topics that I could not include or explain sufficiently due to space constraints, and the most regrettable of these was that I could not systematically organize the contents of design principles. Although I briefly mentioned some design principles or explained the background and necessity of the principles from the perspective of cohesion, coupling, and encapsulation, I could not include a method of connecting various principles in the context of design and a specific guide for applying these principles.

To complement this, the Object - Design Principles section focuses purely on design principles, explaining practical methods for applying design principles when evaluating and improving code at the specific code level. Through the lecture, you will learn how to identify and improve problems in code based on design principles. As a result, after listening to the lecture, you will understand how to design easy-to-maintain code by combining various design principles.

The design principles covered in the lecture are:

  • 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, Do n't Ask ( TDA )

  • Command Query Seperation ( CQS )

  • Do n't Repeat Yourself ( DRY )


Learn about these things

Concept and necessity of design principles

All design principles share the goal of improving the quality of the design. However, the specific goals of each design principle are different. Therefore, the starting point for understanding design principles is to understand the goal that each design principle is trying to improve, and to determine whether improving the current code to meet that goal is appropriate.

By taking the lectures, you will naturally understand why each design principle is necessary and when it is useful.

Concrete guide to applying design principles

It is not enough to simply understand the definition of a design principle. The most important part of design principles is understanding when and which design principles to apply, and applying them in an appropriate manner.

The course provides practical guidance that you can follow when applying each design principle. You can use this guide as a reference and compass to evaluate and improve your code.

Design principles and unit testing

With tests in mind, you get designs that are more cohesive, less coupled, and encapsulate changes. And when you implement your code with design principles in mind, it becomes easier to write and run tests.

The lecture is structured to help you understand the relationship between testing and design principles by explaining how each design principle has a positive effect on testing.

Design Principles and Refactoring

Continuous refactoring is essential to achieve a sufficiently simple and appropriately maintainable design. Design principles provide guidance on where to refactor code and for what purpose.

The lecture is structured so that you can naturally understand design principles by going through the process of refactoring example code from the perspective of design principles.

4 concrete example codes

The course will refactor four examples using design principles: a text adventure game, a game revenue management application, a recurring schedule management application, and a currency management system.

After taking the course, you will intuitively understand the relationship between design principles, refactoring, and testing by learning how to apply various design principles in various situations.

How to apply design principles comprehensively

Design principles are not used in isolation. When writing code, it is common to apply a variety of design principles in combination. And in order to follow one design principle, other design principles must also be considered. Considering design principles in combination enhances the ability to make design tradeoffs in various situations.

In this course, you will learn how to use a variety of design principles in combination while showing how code can be improved through successive refactorings.

Object - Relationship with the basics

You do not need to have taken Object - Basics to listen to Object - Design Principles. While Object Basics covers a top-down approach to creating maintainable designs using Responsibility-Driven Design, Object Design Principles covers a bottom-up approach to refactoring code to make it maintainable.


The two lectures are complementary rather than interdependent, as they cover object-oriented design from different perspectives. Therefore, you can take the lectures in any order, and after taking both lectures, you will gain a comprehensive view of object-oriented design.

It's special in this respect

📌 Describes language-independent object-oriented design principles.

📌 Although the examples are implemented in Java, the concepts presented in the lecture are applicable to any language or environment.

📌 We provide 1400 pages of slides filled with key content.

📌 We have organized the content so that it is easy to understand by expressing the concepts in visual pictures rather than simple text.

📌 Since the refactoring process is conveyed using pictures, it is easy to understand the code change process.

Things to note before taking the class

Learning Materials

  • 1400 pages of lecture slides are available in PDF format.

  • Example code used in the lecture can be found on GitHub .
    If you find it inconvenient to receive examples for each lecture, you can study more comfortably by receiving the integrated version .

Player Knowledge and Notes

  • Since the example code is written in Java, you need to know basic Java grammar to learn smoothly.

  • I wrote the lecture using only the most basic JDK, but some examples use JSON parsing.

    Jackson library , embedded-redis library for in-memory Redis support

    , Redis Java Client Jedis Library

    , which includes a section using the Swing framework for developing GUI applications.
    Even if you don't know these libraries, we've structured it so that you can learn the core principles without difficulty.


  • We use Junit and AssertJ as unit testing libraries.

Recommended for
these people

Who is this course right for?

  • Those curious about the concepts and application methods of Object-Oriented Design Principles

  • Those who find it difficult to apply object-oriented concepts in code

  • For those who need basic principles and guides for designing good code

Need to know before starting?

  • Java basic syntax

  • Experience writing code using object-oriented languages

Hello
This is

2,099

Learners

107

Reviews

72

Answers

5.0

Rating

2

Courses

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

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

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

 

Curriculum

All

33 lectures ∙ (6hr 16min)

Course Materials:

Lecture resources
Published: 
Last updated: 

Reviews

All

23 reviews

5.0

23 reviews

  • choiseonmun님의 프로필 이미지
    choiseonmun

    Reviews 14

    Average Rating 4.9

    5

    100% enrolled

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

    • 조영호
      Instructor

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

  • orc님의 프로필 이미지
    orc

    Reviews 1

    Average Rating 5.0

    5

    100% enrolled

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

    • 조영호
      Instructor

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

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

    Reviews 3

    Average Rating 5.0

    5

    30% enrolled

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

    • 조영호
      Instructor

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

  • soljie74님의 프로필 이미지
    soljie74

    Reviews 2

    Average Rating 5.0

    Edited

    5

    100% enrolled

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

    • 조영호
      Instructor

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

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

    Reviews 2

    Average Rating 5.0

    5

    100% enrolled

    강의 재미있게 들었습니다. 평소에 설계 원칙을 잘 알고 있다고 생각했었는데 의외로 잘못 알고 있던 내용이 많았네요. 코드를 이용해서 설명해주셔서 쉽게 이해할 수 있었습니다. 코드를 어떻게 리팩터링해야할지 막막했는데 강의를 듣고나서 어느정도 명확한 기준을 잡을 수 있게 됐습니다. 좋은 강의 만들어주셔서 감사합니다!

    • 조영호
      Instructor

      개발인생님 수강평 남겨주셔서 감사합니다. 설계원칙을 실제 코드를 작성할 때 활용할 수 있도록 정리했는데 도움이 되셨다니 다행이네요. :) 궁금한 부분 있으면 언제라도 질문 남겨주세요! 완강 축하드리고 행복한 한 주 시작하세요.

$84.70

eternity's other courses

Check out other courses by the instructor!

Similar courses

Explore other courses in the same field!