[ JAVA ] OOP의 4가지 특성과 5원칙

신범철·2022년 9월 25일
0

스프링부트

목록 보기
6/24

OOP란?

OOP란 문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로, 객체들이 서로 유기적 상호작용하는 프로그래밍 이론입니다.

OOP의 장점

  • 상속을 통한 코드 재사용성 증가
  • 독립적인 객체를 생성하여 사용해 생산성을 향상 시킬 수 있다.
  • 프로그램 수성 및 추가를 할 경우에 캡슐화를 통해 주변 영향을 주지 않기 때문에 유지보수가 우수하다.

OOP의 단점

  • 코딩 난이도가 높다.
  • 실행속도가 느리다.
  • 개발속도가 느리다.

OOP의 4가지 특성

캡슐화(Encapsulation)

데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법(정보 은닉)

일반적으로 접근 제어자를 통해 캡슐화를 한다.
ex) class의 멤버 변수를 private로 설정하고, getter와 setter을 통해 멤버 변수를 접근하는 방식

추상화(Abstraction)

클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것

틀과 구현체을 분리하여 객체가 가진 특성 중 필수 속성만으로 객체를 묘사하고 유사성만을 표현하며 세부적인 상세 사항은 각 객체에 따라 다르게 구현될 수 있도록 할 수 있다.

ex) 인터페이스, 추상클래스, 추상메소드로 추상화를 한다.

상속(Inheritance)

부모 클래스에 정의된 변수 및 메서드를 자식 클래스에서 상속받아 사용하는 것

ex) extends 키워드를 사용하여 상속을 한다.

다형성(Polymorphism)

다형성은 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때, 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법으로 응답할 수 있는 능력

ex) 오버로딩(같은 이름의 메소드를 매개변수의 차이에 따라 다른게 실행하는 것), 오버라이딩(상위 클래스가 가지고 있는 메서드를 하위 클래스에서 재정의하여 사용하는 것)


설계 5원칙, SOLID

단일 책임 원칙(Single responsibility principle)

한 클래스는 하나의 책임만 가져야 한다.

클래스가 변경되는 이유는 한가지여야 한다. 여기서 변경의 이유가 한가지라는 것은 해당 클래스가 여러 대상 또는 액터들에 대해 책임을 가져서는 안되고, 오직 하나의 액터에 대해서만 책임을 져야 한다는 것을 의미한다.

코드 예제 페이지

개방 폐쇠 원칙(Open-closed principle)

확장에는 열려 있으나, 변경에는 닫혀 있어야 한다. 기존 코드의 변경하지 않으면서, 기능을 추가할 수 있도록 설계해야 한다.

개발 폐쇠의 원칙이 본질적으로 얘기하고자 하는 것은 추상화이며, 이는 결국 런타임 의존성과 컴파일타임 의존성에 대한 이야기이다. 여기서 런타임 의존성이란 애플케이션 실행 시점에서의 객체들의 관계를 의미하고, 컴파일타임 의존성이란 코드에 표현된 클래스들의 관계를 의미한다.
다형성을 지원하는 객체지향 프로그래밍에서 런타임 의존성과 컴파일 타임 의존성은 동일하지 않다. 컴파일 시점에서는 인터페이스를 의존하지만 런타임 시점에서는 인터페이스를 구체화한 클래스에 의존하는 것이다.

코드 예제 페이지

리스코프 치원 원칙(Liskov substitution principle)

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

인터페이스 분리 원칙(Interface segregation principle)

하나의 범용적인 인터페이스보다 여러 개의 구체적인 인터페이스가 좋다는 원칙이다.

클라이언트의 목적과 용도에 맞는 적합한 인터페이스만을 사용해야한다.

< 하나의 범용적인 인터페이스 사용시 >

< 구체적인 인터페이스로 사용 >

의존 역전 원칙(Dependency Inversion principle)

고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다는 것이다.

참고문헌

oop 정의, 특징, 장단점

solid 정의

solid 예시 사진 참고문헌

solid 코드 적용사례

solid 적용사례

인프런 스프링 핵심원리 기본편

profile
https://github.com/beombu

0개의 댓글