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

/

etc. (Programming)

Objects - Basics

Learn object-oriented design methods, represented by the responsibility-driven design method, and explore how to make design tradeoffs in terms of cohesion, coupling, and encapsulation.

(5.0) 84 reviews

1,510 learners

  • eternity
저자 직강
이론 중심
객체지향
software-design
oop

Reviews from Early Learners

What you will learn!

  • Problems with procedural design

  • How to design and implement code in an object-oriented manner

  • Basic principles for assigning responsibilities to objects

  • Dependency Management Techniques

  • How to trade off design using cohesion, coupling, and encapsulation

Contains the core of object-oriented design!

This lecture, based on my book, Objects , explains how to design collaboration between objects and implement it using an object-oriented language, following the Responsibility-Driven Design (RDR) methodology. RDR is a method of designing the object collaboration necessary to implement an application's functionality, focusing on the responsibilities assigned to each object.

One regret I had while writing the Objects book was that, while explaining how to design objects based on responsibility, space constraints prevented me from fully explaining why we should focus on domains and responsibilities. I also regret not covering some of the GRASP patterns used to assign responsibilities.

To address this shortcoming, the lecture covers not only object-oriented design methods, but also the theoretical background of responsibility-driven design methods, which were not fully covered in the book, as well as the missing GRASP patterns. Therefore, I can confidently say that I've summarized what I consider to be the core of object-oriented design in the most concise manner possible.

It's special in this respect

📌 Describes language-independent object-oriented design concepts.

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

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

📌 We've organized the content so that it's easy to understand by expressing concepts in visual images rather than simple text.

📌 The refactoring process is carefully documented in slides, making it easy to understand the code change process.

Learn about these things

Section 1. Movie Ticket Reservation Domain

We'll examine the requirements for a movie ticket reservation system, which we'll use as an example in this lecture. We'll analyze how discounts are calculated based on the key concepts and relationships that make up the movie ticket reservation domain.

The domain model analyzed in this way serves as useful material for assigning responsibilities to objects later.

Section 2. Improving Procedural Design

Have you ever heard that writing code procedurally has several maintenance drawbacks, but not sure exactly what the issues are?

The lecture is structured to help you naturally understand why object-oriented programming is necessary by explaining the problems with procedurally written code and improving it to make it easier to change.

Section 3. Object-Oriented Fundamentals

Responsibility-driven design (RDR) is the most widely used object-oriented design technique. RDR designs the overall collaboration of objects based on the responsibilities assigned to each object. Many people understand that responsibility should be central to design, but they often apply RDR without fully understanding the precise reasons for doing so.

In this lecture, we explain why responsibility is central and outline the big picture required to design and implement objects.

Section 4. Assigning Responsibilities

Successfully applying responsibility-driven design methods requires careful selection of responsibilities to assign to objects within the context of collaboration.

In this lecture, we will look at the information expert, creator, loose coupling, high cohesion, polymorphism, and change protection patterns that are commonly applied when assigning responsibilities, and learn when to apply these patterns.

Section 5. Object-Oriented Implementation

Learn how to implement objects designed from a responsibility perspective as classes. You'll also learn that clearly separating messages and methods allows you to control dependencies, making your design flexible and consistent.

We'll look at the Indirection, Pure Artifact, and Controller patterns, which we didn't cover in Section 4, and how to apply these patterns to implement objects that implement application logic.

Section 6. Changes and Design

The goal of design is to write code that is easy to change, and good design means a design that is highly cohesive, loosely coupled, and adheres to encapsulation.

In this lecture, you will learn the concepts of cohesion, coupling, and encapsulation from the perspective of change, and apply these principles to trade-off procedural and object-oriented design.

Things to note before taking the course

Learning Materials

  • 690 pages of lecture slides are provided in PDF format.

  • The example code used in the lecture can be found on GitHub .

Player Knowledge and Precautions

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


  • Although it contains some code that uses the Spring Framework, it is structured so that you can understand the content without any difficulty even if you are not familiar with the Spring Framework.


Recommended for
these people

Who is this course right for?

  • For those who are curious about the concept and application of object-oriented design

  • People who have difficulty applying object-oriented concepts to their code

  • For those of you who are curious about the basic principles of assigning responsibilities to objects

Need to know before starting?

  • Java Basic Grammar

  • Experience writing code using an object-oriented language

Hello
This is

2,101

Learners

107

Reviews

72

Answers

5.0

Rating

2

Courses

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

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

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

 

Curriculum

All

31 lectures ∙ (5hr 0min)

Course Materials:

Lecture resources
Published: 
Last updated: 

Reviews

All

84 reviews

5.0

84 reviews

  • 아무도_모를_아이디님의 프로필 이미지
    아무도_모를_아이디

    Reviews 43

    Average Rating 4.8

    5

    90% enrolled

    이번년도 최고의 강의 중의 하나이며 개발에 대한 관점이 완전히 바뀌었습니다.

    • 조영호
      Instructor

      과분한 칭찬 남겨주셔서 감사합니다. 강의를 들으신 분들이 유지보수성 관점에서 코드를 바라보도록 시각이 바뀌면 좋겠다고 생각했는데 관련해서 조금이라도 인사이트를 얻으셨기를 기대할게요. :)

  • 황설탕님의 프로필 이미지
    황설탕

    Reviews 1

    Average Rating 5.0

    5

    87% enrolled

    [인프런에서 산 강의 중 가장 만족스러운 강의] 개인적으로 가격대가 있다고 느껴 고민하다 수강했는데, 정작 강의를 듣고 나서는 왜 진작 듣지 않았을까 후회할 정도로 대만족했고, 오브젝트 책도 바로 구매했습니다😊 최근 학교에서 작은 프로젝트 과제를 풀게 되었는데, 과제를 진행하며 계속 크고 작은 문제가 생겼고, 이를 해결하기 위해 설계와 코드를 뒤엎고 새로 짜는 과정을 수없이 반복했습니다. 하지만 막상 뒤엎고 코드를 다시 짜도 어디에 어느 정도의 책임을 둬야 할지 기준을 제대로 잡지 못했으며, 사소한 변경에도 수많은 코드를 뜯어고치느라 한참을 헤맸습니다. 처음에는 언어가 부족하거나 디자인 패턴 혹은 설계를 몰라서 그런가 싶어 관련 책을 사서 추가적으로 공부를 했고, 교수님과 선배들에게 상담도 받아봤지만, 그 무엇도 막상 제가 정말 궁금한 부분들을 시원하게 해소해 주지는 못했습니다. 그렇게 고민을 안고 있을 때 우연히 오브젝트 강의를 발견했습니다. 강의 설명을 훑어보고 '뭔가 내가 찾던 내용인가?' 싶었는데, 그게 정답이었습니다! 제 고민들은 `나도 모르게 절차지향적인 코드를 객체지향적인 코드라 착각하며 짜고 있음`으로부터 생겨난 것들이었습니다. 저는 학교에서 수업을 듣고, 인프런에서 자바/스프링 강의도 몇 개 수강했으며, 관련 책도 몇 권 읽었기에 '그래도 객체지향적으로 코드를 작성하고 있지 않을까?'라고 생각했지만, 강의를 듣자마자 그건 크나큰 착각이었고, 여지껏 제가 짜온 코드는 절차지향적인 코드라는 사실을 깨달았습니다...ㅋㅋㅋ 절차지향적인 코드들을 객체지향적인 설계로 바꾸는 과정과 개념들을 저 같은 초보자도 무리 없이 들을 수 있도록 쉽게 풀어 설명해 주셨습니다. 특히 까먹을 만하면 딱 그 내용을 다시 간단히 설명해 주시는 점이 소름 돋으면서도 정말 좋았습니다. 강의를 통해 그간 객체지향에 대해 오해하고 있던 부분들, 모호하거나 피상적으로 알고 있던 부분들을 확실히 잡을 수 있어 좋았고, "객체를 객체답게 사용한다"가 어떤 의미인지 깨달을 수 있었습니다. 밀린 숙제하듯 들은 강의가 아니라 궁금했던 부분을 정확히 해소해준 강의라 시간 가는 줄 모르고 정말 재밌게 들었던 강의였습니다. 다음 강의가 빨리 나왔으면 좋겠습니다!!

    • 조영호
      Instructor

      황설탕님 좋은 수강평 남겨 주셔서 감사합니다. :) 강의의 주된 내용이 객체지향의 기본 철학에 집중하다보니 강의를 들으시는 분들이 많이 지루해하시지 않을까 걱정이 많았었는데 황설탕님의 수강평을 보고나니 안심이 되네요. 강의를 들으시고 "객체를 객체답게" 사용하는 방법에 대해 이해를 하셨다니 다행입니다. 강의 재미있게 들어주셔서 정말 감사드리고 다음 강의도 잘 준비해서 빠른 시일 내에 찾아 뵙겠습니다. :) 궁금한 내용 있으면 질문 남겨주시고 행복한 주말 보내세요!

  • ycseol님의 프로필 이미지
    ycseol

    Reviews 5

    Average Rating 5.0

    5

    100% enrolled

    IT의 기술을 다루는 강의에서 개발 패러다임이라는 어찌보면 주관을 다루는 강의는 학습자에게 소양을 쌓는데 큰 도움을 주는것 같다. 다른 스프링이나 자바 강의도 좋지만 타이핑을 하기 전에 한 번 쯤 생각할 수 있게 만드는 이런 강의가 정말 좋은것 같다.

    • 조영호
      Instructor

      강의를 만들 때 객체지향 설계가 Spring처럼 지금 당장 배울 필요가 있는 내용은 아니다보니 오픈 이후 반응이 어떨지 조금 걱정했는데 ycseol님처럼 도움이 된다고 생각하시는 분들이 계셔서 마음이 놓이네요. 긍정적으로 평가해 주셔서 감사합니다. :)

  • korchl님의 프로필 이미지
    korchl

    Reviews 2

    Average Rating 5.0

    5

    100% enrolled

    너무 좋은 강의입니다. 연차와 상관없이 들으시면 모든 개발자들에게 도움이 될 것 같아요.

    • 조영호
      Instructor

      korchl님 완강 축하드리고 좋게 평가해 주셔서 정말 감사합니다. 도움이 되었다니 정말 다행이네요. 다음 강의도 실망하시지 않도록 열심히 만들어 보겠습니다. :) 날씨가 많이 쌀쌀해 졌는데 건강 잘 챙기시고 새해 복 많이 받으세요!

  • 김민규 (Rabbit)님의 프로필 이미지
    김민규 (Rabbit)

    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!