본문 바로가기
공부이야기/Java

[Java] 객체 지향 프로그래밍 (OOP: Object-Oriented Programming)

by coderoom 2021. 4. 29.

 

 

https://velog.io/@cyranocoding/객체-지향-프로그래밍OOP-Object-Oriented-Programming-개념-및-활용-정리-igjyooyc6c

 

 

객체 지향 프로그래밍이란?

객체 지향 프로그래밍(OOP: Object-Oriented Programming)은 컴퓨터 프로그램을 객체(Object)라는 여러 개의 독립된 단위의 모임으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임 중 하나이다. 각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있다.

 

장점

  • 강한 응집력 (Strong Cohesion)
    • 응집력: 프로그램의 한 요소가 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐 있는지를 나타내는 정도
    • 클래스에 하나의 문제 해결을 위해 데이터를 모아 놓은 객체를 활용한 프로그래밍을 지향하므로 응집력 강화
  • 약한 결합력 (Week Coupling)
    • 결합력: 프로그램 코드가 한 요소가 다른 것과 얼마나 강력하게 연결되어 있는지, 얼마나 의존적인지를 나타내는 정도.
    • 클래스 간에 독립적으로 디자인함으로써 결합력 약화

 

 

 

OOP의 특성

 

Abstraction (추상화)

공통의 속성이나 기능을 묶어 이름을 붙이는 것. 사자, 토끼, 강아지를 동물이라는 추상적인 개념으로 묶는 것.

 

Encapsulation (캡슐화)

속성(attribute)과 행위(behavior)들을 관련있는 것끼리 묶는 것. 이때 중요한 것은 외부에서 접근이 필요한 부분을 제외하고는 내부로 숨기는 것. 대게 클래스를 통해 구현되고, 데이터를 외부에서 직접 접근하도록 하지 않고 메소드를 통해 접근하게 하는 것이 바로 캡슐화이다.

 

Inheritance (상속)

상위 개념의 특징을 하위 개념이 물려 받는 것. 부모 클래스로부터 특징들을 물려받게 되면 이미 구현된 세부 내용을 다시 구현할 필요가 없기 때문에 코드의 재사용성(reusability)가 향상된다.

 

Polymorphism (다형성)

하나의 속성이나 행위가 상황에 따라 다른 의미로 해석될 수 있는 특징을 말한다. 가장 대표적인 방법이 바로 상속(inheritance).

동물이라는 부모 클래스를 상속받은 사자 클래스와 토끼 클래스. 동물 클래스의 eat()함수를 각각 상속받아 사자는 고기를 먹는 행위를하고 토끼는 풀을 먹는 행위를 한다. 하나의 메소드이지만 사자와 토끼가 다르게 해석될 수 있다.

 

 

 

 

 

객체 지향 설계 5대 원칙 (SOLID)

 

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

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

 

OCP (Open Closed Principle): 개방-폐쇄 원칙

기존의 코드를 변경하지 않으면서(closed), 기능을 추가할 수 있도록(open) 설계가 되어야 한다.

 

LSP (Liscov Substitution Principle): 리스코프 치환 원칙

자식 클래스는 언제나 부모 클래스를 대체할 수 있다. 동물 사자 = new 사자();

 

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

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

(하나의 일반적인 인터페이스보다는 여러 개의 구체적인 인터페이스가 낫다.)

 

DIP (Dependency Inversion Principle): 의존성 역전 원칙

의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것 보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 한다.

(구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺으라.)

 

 

 

 

참고 링크

 

 

 

 


 

댓글