객체(Object)

현실세계의 실체 및 개념을 반영하는 상태(Status)와 행위(Behavior)를 정의한 데이터의 집합

 

 

객체 지향 프로그래밍(OOP, Object-Oriented Programming)

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법

객체 지향 프로그래밍은 유연하고 변경이 용이할 뿐만 아니라 유지 보수가 쉽기 때문에 대규모 SW개발에서 자주 사용된다.

 

 

OOP의 특징

  • 추상화(Abstraction)
    구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것

  • 캡슐화(Encapsulation)
    정보 은닉(information hiding): 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것
    높은 응집도, 낮은 결합도를 유지하여 유연함과 유지보수성이 증가한다.

  • 상속(Inheritance)
    부모의 형질을 이어받는다는 의미로, 부모 클래스의 속성과 메소드를 그대로 활용할 수 있다. 여기에 더해 새로운 속성과 메소드를 추가할 수 있으며 같은 메소드라 하더라도 오버라이딩(Overriding)을 통하여 재정의하여 다르게 동작하게끔 할 수 있다. 손쉽게 클래스를 재활용할 수 있으며, 부모가 같은 클래스들을 동시에 처리하기 용이하다.

  • 다형성(Polymorphism)
    같은 코드라 하더라도 상황에 따라 다른 방식으로 동작하는 성질이다. Java에서 다형성을 구현할 수 있는 대표적으로 Overriding과 Overloading이 있다. 

 

 

객체 지향 설계원칙(SOLID)

  • SRP(Single Responsibility Principle, 단일 책임 원칙)
    클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.

  • OCP(Open-Closed Principle), 개방-폐쇄 원칙)
    확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
    인터페이스를 구현한 객체를 통해 새로운 기능(확장)을 구현한다.

  • LSP(Liskov Substitution Principle, 리스코프 치환 원칙)
    상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

  • ISP(Interface Segregation Principle, 인터페이스 분리 원칙)
    인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

  • DIP(Dependency Inversion Principle, 의존 역전 원칙)
    고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
    프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다.

 

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

Overloading 과 Overriding  (0) 2021.11.18
Java Collection 과 Generic  (0) 2021.11.18
JVM(Java Virtual Machine) 이란?  (0) 2021.11.18
Java 의 데이터 타입 / 접근제한자 / static  (0) 2021.11.10
Java 의 특징과 구성 요소  (0) 2021.11.10