[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙

2023. 6. 18. 00:33·Java/Base
728x90
728x90

객체 지향 프로그래밍

  - 프로그램을 '객체'라는 기본 요소로 봄

      → 이들 간의 관계를 형성하거나 상호작용함으로써 프로그램을 설계/구현하는 방법론

  - 객체

      : 데이터 (상태)와 데이터를 처리하는 함수 (행동)를 하나로 묶은 것

#  핵심 원리

  1) 캡슐화 (Encapsulation)

      : 객체의 데이터를 외부로부터 직접 접근할 수 없도록 숨기고, 함수를 통해서만 접근하도록 함

          → 객체의 내부 데이터를 보호하고, 객체가 받아들일 수 있는 연산을 제어함

  2) 상속 (Inheritance)

      : 한 클래스의 속성/메서드를 다른 클래스가 물려받는 것

          → 코드의 재사용성 향상 & 중복된 코드 축소

  3) 다형성 (Polymorphism)

      : 하나의 메서드/클래스가 있을 때, 이러한 것들이 다양한 방법으로 동작하는 것

      ex) 같은 이름의 메서드가 인자에 따라 다른 동작을 하는 것

      ex) 하나의 변수가 여러 타입의 객체를 참조할 수 있는 것

 

 


객체지향 프로그래밍의 SOLID 원칙

  1) Single Responsibility Principle (SRP, 단일 책임 원칙)

      : 한 클래스는 하나의 책임만을 가져야 함

 

  2) Open/Closed Principle (OCP, 개방 폐쇄 원칙)

      : 클래스는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 함

 

  3) Liskov Substitution Principle (LSP, 리스코프 치환 법칙) 

      : 상위 타입의 객체를 하위 타입의 객체로 치환해도 프로그램은 일관성을 유지해야 함

 

  4) Interface Segregation Principle (ISP, 인터페이스 분리 원칙)

      : 사용하지 않는 인터페이스의 영향을 받지 않아야 함

          → 한 클래스는 자신이 사용하지 않는 인터페이스를 구현하지 않아야 함

 

  5) Dependency Inversion Principle (DIP, 의존관계 역전 원리)

      : 상위 모듈은 하위 모듈에 의존하면 안되고, 모두가 추상화에 의존해야 함

          → 세부 사항은 추상화에 의존해야 함

     - 의존 관계를 맺을 때에는 변화하기 쉬운 것보다는 변화하기 어려운 것에 의존해야 함

        · 변화하기 쉬운 것 : 구체화된 클래스

        · 변화하기 어려운 것 : 추상 클래스, 인터페이스

    

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > Base' 카테고리의 다른 글

[Java] JVM (Java Virtual Machine)  (0) 2023.06.18
[Java] Garbage Collection  (0) 2023.06.18
[Java] 데이터 형식 지정  (0) 2023.04.20
[Java] 스트림 (Stream)  (0) 2023.04.07
[Java] 람다 표현식 (Lambda expression)  (0) 2023.03.22
'Java/Base' 카테고리의 다른 글
  • [Java] JVM (Java Virtual Machine)
  • [Java] Garbage Collection
  • [Java] 데이터 형식 지정
  • [Java] 스트림 (Stream)
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (384)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (16)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    errorNote
    Wordpress
    SpringBoot
    티스토리챌린지
    Codeigniter
    SQL
    vuejs
    http
    tailwindcss
    면접
    개발일지
    Swing
    CSS
    SWAGGER
    Android
    php
    jQuery
    jsp
    cs
    java
    js
    오블완
    git
    HTML
    C#
    Hotkeys
    typeScript
    SEO
    zapier
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙
상단으로

티스토리툴바