[OOP] 객체 지향 설계의 "핵심원칙"과 "SOLID 원칙"

SuJeong.K·2024년 9월 13일
0
post-thumbnail

OOP란?

OOP(Object-Oriented Programming)는 '객체지향 프로그래밍'을 의미하며,
객체들이 상호작용하는 방식으로 프로그램을 설계하는 프로그래밍 방법 중 하나이다.
객체는 데이터(필드)와 기능(메서드)으로 이루어졌으며, 이를 유기적으로 연결하여
현실세계의 개념을 코드로 모델링하는 것을 목표로 한다.

Java의 경우 이 객체를 인스턴스라고 하며, 클래스를 기반으로 생성된 실체라고 할 수 있다.
Java에서는 new 키워드를 사용하여 클래스를 인스턴스화하면, 메모리에 객체가 생성된다.



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

  1. 추상화
    추상화란 객체의 공통적인 속성과 기능을 추출하여 추상클래스나 인터페이스로 정의하고,
    이를 활용하여 구현클래스를 만드는 것을 말한다. 이렇게 추상적인 존재에 의존하면 다형성을
    가질 수 있고, 코드의 재사용과 유지보수성을 개선할 수 있다는 장점이 있다.

  2. 다형성
    다형성이란 하나의 객체가 여러 타입을 가질 수 있고, 어떤 타입인지에 따라 다른 역할을
    수행할 수 있는 성질을 말한다. 대표적으로는 오버로딩과 오버라이딩이 있다.

  3. 상속
    상속이란 기존 클래스를 재활용하여 새로운 클래스를 만드는 것으로, 상위 클래스로부터
    확장된 여러 하위 클래스가 상위 클래스의 속성과 기능을 간편하게 사용할 수 있다.

  4. 캡슐화
    캡슐화란 서로 연관된 속성과 기능을 하나의 단위로 묶어 객체를 구성하고, 외부로부터
    보호하는 것을 말한다. 이를 통해 외부의 잘못된 접근으로 의도치 않는 동작이 일어나는
    것을 방지할 수 있다.



SOLID 원칙이란?

SOLID 객체 지향 원칙을 적용하면 코드 확장과 유지보수 관리가 쉬워지며,
불필요한 복잡성을 제거하여 프로젝트 개발의 생산성을 높일 수 있다.

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙
    "클래스는 하나의 책임만 가져야 한다."
    : 하나의 기능만 담당하도록 하여 유지보수성과 코드의 가독성을 높일 수 있다.
    이 원칙에 따르면 클래스는 오직 하나의 변경 이유만 가져야 한다.

  2. OCP(Open-Closed Principle) : 개방-패쇄 원칙
    "소프트웨어 구성요소는 확장에 열려있고, 변경에는 닫혀있어야한다."
    : 변경사항 발생시 유연하게 기능을 추가할 수 있고, 객체에 직접적인 수정은 제한한다.

  3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
    "하위타입은 항상 상위타입을 대체할 수 있어야한다."
    : 상위타입의 객체를 하위타입의 객체로 치환해도 프로그램의 동작이 유지되어야한다.

  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
    "사용하지 않는 인터페이스에 의존하지 않아야한다."
    : 여러개의 작은 인터페이스를 사용하여 필요한 기능만 제공하도록 한다.

  5. DIP(Dependency Inversion Principle) : 의존 역전 원칙
    "고수준 모듈은 저수준 모듈에 의존해서는 안된다."
    : 추상화는 구체화에 의존하지 않고, 구체화가 추상화에 의존해야한다.



0개의 댓글