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

/

etc. (Programming)

オブジェクト - 設計原則編

オブジェクト指向的なコードを書くために知っておくべき様々な設計原則を、動作するコードを中心に学習します。

  • eternity
oop
Software Test
software-design

学習した受講者のレビュー

こんなことが学べます

  • オブジェクト指向設計原則

  • 設計原則を使ってコードの問題点を把握する方法

  • リファクタリングでコードを進化させる方法

  • テストとコード品質の関係

オブジェクト指向設計の原則、
適用する方法を理解する🤔

オブジェクトを執筆しながら地面の制約のために含めることができなかったり、十分に説明できなかったトピックが多いが、その中で最も惜しい点が設計原則に関する内容を体系的に整理できなかったということです。いくつかの設計原則は簡単に言及したり、凝集度、結合度、カプセル化の観点から原則の背景と必要性を説明したりしていますが、設計という文脈内でさまざまな原則を結びつける方法と、これらの原則を適用するために必要な具体的なガイドは収録できませんでした。

この部分を補完するために、オブジェクト - 設計原則では、純粋に設計原則に焦点を当て、コードを評価および改善するときに設計原則を適用する実用的な方法を具体的なコードレベルで説明します。講義では、設計原則に基づいてコードの問題を特定し改善する方法を学ぶことができます。その結果、講義を聞いた後は、さまざまな設計原則をまとめてメンテナンスしやすいコードを設計する方法を理解できます。

講義で扱う設計原則は次のとおりです。

  • 単一抽象化レベルの原則( 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つの例を設計原則を適用しながらリファクタリングする方法で行われます。

講義を聞いた後、さまざまな状況でさまざまな設計原則を適用することで、設計原則、リファクタリング、テスト間の関係を直感的に理解することができます。

設計原則を総合的に適用する方法

設計原則は独立して使用されません。コードを書くときは、さまざまな設計原則を包括的に適用するのが一般的です。そして、ある設計原則に従うためには、他の設計原則も一緒に考慮する必要があります。設計原則を複雑に考慮すると、さまざまな状況で設計をトレードオフする能力が向上します。

講義では、連続的なリファクタリングによってコードが改善される過程を示しながら、さまざまな設計原則を複合的に活用する方法を学習できるようになります。

オブジェクト - 基礎編との関係

オブジェクト - 設計の原則を聞くために、オブジェクト - ベースを最初に聞く必要はありません。オブジェクト基盤が責任主導の設計を使用してメンテナンス可能な設計を作成するトップダウン方式を扱う場合、オブジェクト設計原則はコードをメンテナンス可能にリファクタリングするボトムアップ方式を扱います。


2つの講義はオブジェクト指向の設計を異なる観点で扱っているので、相互に依存せずに補完的な関係を持っています。したがって、どのような順序で講義を見ても構いません。両方の講義を見た後は、オブジェクト指向の総合的な視覚を得ることができます。

この点で特別です。

📌言語に依存しないオブジェクト指向設計の原則を説明します。

📌の例はJavaで実装されていますが、講義が提供する概念はどの言語や環境にも適用できます。

📌重要な内容で満たされた1400ページ分のスライドを提供します。

📌概念を単純なテキストではなく視覚的な絵で表現し、内容を理解しやすいように構成しました。

📌リファクタリングプロセスを画像を使って渡すので、コードの変更プロセスを簡単に理解できます。

受講前の注意

学習資料

  • 1400ページ分の講義スライドがPDF形式で提供されています。

  • レッスンで使用されるサンプルコードはFitHubから入手できます。
    講義ごとに例を受け取ることが不便な方は、 統合本を受け取れば、より快適に学習することができます。

選手の知識と注意事項

  • サンプルコードはJavaで書かれているので、Javaの基本的な文法を知っておくとスムーズな学習が可能です。

  • できるだけ基本的なJDKだけを使ってレッスンを作成しましたが、いくつかの例ではJSON解析のために

    Jackson ライブラリ, インメモリレディスサポートのためのembedded-redis ライブラリ

    、Redis JavaクライアントJedisライブラリ

    、GUIアプリケーション開発にSwingフレームワークを使用する部分が含まれています。
    これらのライブラリを知らなくても、重要な原則を学ぶのに無理がないように構成しました。


  • 単体テストライブラリとしてJunitAssertJを使用してください。

こんな方に
おすすめです

学習対象は
誰でしょう?

  • オブジェクト指向設計原則の概念と適用方法について知りたい方

  • オブジェクト指向の概念をコードに適用するのに苦労する方々

  • 良いコード設計のための基本的な原則とガイドが必要な方々

前提知識、
必要でしょうか?

  • Java 基本文法

  • オブジェクト指向言語を使ったコーディング経験

こんにちは
です。

2,099

受講生

107

受講レビュー

72

回答

5.0

講座評価

2

講座

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

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

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

 

カリキュラム

全体

33件 ∙ (6時間 16分)

講座資料(こうぎしりょう):

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

全体

23件

5.0

23件の受講レビュー

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

  • soljie74님의 프로필 이미지
    soljie74

    受講レビュー 2

    平均評価 5.0

    修正済み

    5

    100% 受講後に作成

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

    • 조영호
      知識共有者

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

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

    受講レビュー 2

    平均評価 5.0

    5

    100% 受講後に作成

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

    • 조영호
      知識共有者

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

¥12,838

eternityの他の講座

知識共有者の他の講座を見てみましょう!

似ている講座

同じ分野の他の講座を見てみましょう!