강의

멘토링

로드맵

BEST
Programming

/

etc. (Programming)

Object - Design Principles

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

(5.0) 36 reviews

685 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,297

Learners

141

Reviews

92

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

36 reviews

5.0

36 reviews

  • haedallog님의 프로필 이미지
    haedallog

    Reviews 14

    Average Rating 4.9

    5

    100% enrolled

    It's an honor to leave the first review. After completing `<Object - Basics>`, I immediately took `<Object - Design Principles>` as well and am now writing this review. The advantages of the course are as follows: 1. It's easy to understand intuitively because it's not just listing principles but includes actual code examples. ㄴ I thought I knew the SOLID principles because I encounter them often, but after watching the lecture, I realized that was my misconception. 2. Convenience has increased compared to `<Object - Basics>`. ㄴ A link to the relevant repo is provided through the course materials, making it easy to access. ㄴ The presenter is no longer visible, making the presentation much easier to see. There are also some slightly disappointing aspects (They are minor). 1. The volume level differs slightly for each video, which is a bit distracting. 2. There are also cases where there are errors in the videos. 3. If colloquial phrases like '되게 됩니다.' were refined, it would feel tidier. 4. There are instances where the notation for foreign words differs (e.g., 메서드/메소드), and it would be a bit tidier if this were unified. I highly recommend watching `<Object - Basics>` as well. It allows for a broader understanding of the course. If you don't know what object-oriented design is, I strongly recommend this course. I plan to recommend it to many people around me as well 😊😊 Thank you to Jo Young-ho for planning this great course. I expect my code to change significantly in the future. Work less, earn more 😊😊😊

    • eternity
      Instructor

      I remember you recently left a review for "Object - Basic Course", and you've already completed it. Congratulations on completing the course, and thank you for leaving a review. :) I'm glad the course was helpful. I decided to remove my face from the videos at the request of many acquaintances, and I'm glad the reaction has been positive... Due to health reasons, the filming period was extended, which resulted in slightly varying audio levels. If anyone finds this inconvenient, I will consider re-recording "Object - Basic Course" along with it in the future. :) I'm creating, filming, and editing the course by myself, and this course ended up having more presentation slides than expected. Although I checked in between, it seems there were parts I didn't notice. I apologize for releasing it without thoroughly checking this part. I will also review it again and make corrections as quickly as possible. :) If it's convenient for you, please let me know about any errors in the video or inconsistencies in the slides, and I will correct and update them as quickly as possible. The phrase "Work less, earn more" resonates with me. I hope the course helps reduce maintenance costs and improve code quality. Thank you!

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

    Reviews 2

    Average Rating 5.0

    5

    100% enrolled

    I really enjoyed the lecture. I thought I knew the design principles well, but unexpectedly, there were many things I had misunderstood. Explaining using code made it easy to understand. I was unsure how to refactor code, but after the lecture, I was able to establish some clear criteria. Thank you for creating a great lecture!

    • eternity
      Instructor

      Thank you for leaving a review, GaeBalInSaeng-nim. I'm glad the design principles, organized to be applicable when writing actual code, were helpful. :) If you have any questions, feel free to leave them anytime! Congratulations on completing the course, and have a happy start to your week.

  • enciel02028311님의 프로필 이미지
    enciel02028311

    Reviews 3

    Average Rating 5.0

    5

    30% enrolled

    It's exciting like watching a movie, as the story about design continues~ I'll keep listening carefully~ Thank you for the good lecture!

    • eternity
      Instructor

      Thank you for leaving a review, Byung-mo Kim. It's structured to show how design principles are applied while improving examples, and it seems you're enjoying it. :) The difficulty increases slightly as you go towards the latter part, but more interesting content awaits, so please make sure to complete the course. If you have any questions or parts that need correction, please feel free to ask anytime. Have a great Friday night and spend happy days.

  • soljie742878님의 프로필 이미지
    soljie742878

    Reviews 2

    Average Rating 5.0

    Edited

    5

    100% enrolled

    Following the basic course, this seems like the best lecture on object-oriented programming. It is very substantial as it is composed of well-structured content from concepts to examples.

    • eternity
      Instructor

      Thank you for leaving a course review, soljie74. If 'Object - Basic' explained how to write object-oriented code, 'Object - Design Principles' aimed to explain how to improve design using object-oriented principles, and I'm glad it was helpful. If you have any questions or suggestions for improvement, please feel free to ask anytime. Congratulations on completing the course, and have a good rest of your weekend!

  • chrispark님의 프로필 이미지
    chrispark

    Reviews 6

    Average Rating 5.0

    5

    100% enrolled

    This is a premium lecture on the core principles and fundamentals of object-oriented development~ I can say there's a world of difference between developing with knowledge of these principles versus developing without them. If you're currently developing without knowing these principles, you'll eventually realize that you've been writing spaghetti code~!! :) Let's all keep fighting today to create code that's easy to maintain~ 😊

    • eternity
      Instructor

      Thank you so much for leaving a review, Chris Park. As you mentioned, I hope many people will be able to write clean code based on design principles. I'm so grateful that you're satisfied with the course, and I'll work hard to prepare the next course as well! Have a happy weekend. :)

$84.70

eternity's other courses

Check out other courses by the instructor!

Similar courses

Explore other courses in the same field!