본문 바로가기

프로그래밍 언어 기초/JAVA

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

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

 

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

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다
. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.
출처 링크

 

 

객체지향 프로그래밍은 프로그래밍의 패러다임 중 하나입니다.

당연히 이외 비교되는 다른 프로그래밍 패러다임이 있는데 바로 절차지향 프로그래밍입니다.

 

 절차지향 프로그래밍이란 간단하게 설명하면 도미노 쌓기와 같다고 할 수 있습니다. 도미노를 완성하기 위해서는 처음부터 끝까지 잘 세워야 완성할 수 있는 것처럼 절차지향 프로그래밍은 어떤 기능을 수행하는 프로그램을 만들기 위해 작성한 코드들은 연속적으로 결합 되어 있는 형태를 띠고 있어 하나의 프로그램이 정상적으로 작동하기 위해서는 그 프로그램을 구성하고 있는 모든 계산이 올바르게 되어야 가능하다는 특징을 가지는 프로그래밍하는 패러다임입니다.

 

 하지만, 이러한 형태는 프로그램을 구성하는 데이터의 타입이나 의미가 변해서 수정이 필요한 경우 함께 수정해야 할 코드들이 프로그램이 커질수록 많아진다는 단점을 가지고 있습니다. 그래서 이러한 단점을 보완하기 위해 등장한 패러다임이 객체지향 프로그래밍입니다.

 

9.2. 객체지향 프로그래밍의 4대 원칙 (APIE)

객체지향은 다음의 4가지 원칙을 준수하려고 합니다.

1. 추상화(Abstraction)

추상화란 컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말합니다.

 

 이 개념은 개발자가 갖추어야 할 일종의 덕목이라고 볼 수 있으며, 메소드 등을 작성할 때 메소드 명으로부터 기능을 쉽게 유추 가능하게 하거나, 클래스 명에서 하위의 메소드들이 논리적으로 타당해 보이는 것들로 구성하는 등으로 코드 스타일을 신경쓰는 것 등으로 실현할 수 있습니다.

 

 

2. 다형성(Polymorphism)

다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다.

자바에서 다형성은 자식 클래스로 만든 인스턴스가 부모 클래스의 자료형으로 선언 가능한 것을 사례로 들 수 있습니다.

 

3. 상속(Inheritance)

상속(inheritance)은 객체들 간의 관계를 구축하는 방법입니다.

자바에서는 상속으로 이 원칙을 실현할 수 있습니다.

https://1-hee.tistory.com/15

 

Chapter 6. 상속(Inheritance)

6. 상속(Inheritance)이란? 자바에서는 클래스간에 서로 부모-자식의 관계를 설정할 수 있습니다. 예를 들면 Fruit이라는 클래스를 만들었는데, 이 클래스를 계승하는 Apple이나 Orange 같은 클래스를 만

1-hee.tistory.com

 

4. 캡슐화(Encapsulation)

캡슐화란 객체의 속성(data, fields)과 행위(메서드, methods)를 하나로 묶고, 실제 구현 내용 일부를 내부에 감추어 은닉하는 것을 의미합니다.

자바에서는 이를 접근 제한자로 실현할 수 있으며, 캡슐화가 잘 된 사례로 싱글턴 패턴이 있습니다.

 

https://1-hee.tistory.com/17

 

Chapter 8. 접근제한자(Access Modifier)와 싱글턴 패턴

8. 1. 접근 제한자(Access Modifier)란? 몇 개월에 걸쳐 열심히 만들어낸 음원을 다른 사람이 도용해서 쓴다면 정말 화가 나겠죠. 이러한 사태를 방지하기 위해 저작권이라는 권리가 존재하는 것처럼

1-hee.tistory.com

 

 

9.3. 객체지향 프로그래밍의 SOLID 설계 원칙

 컴퓨터 프로그래밍에서 SOLID란 로버트 마틴2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것을 말합니다. 출처 링크

 

두문자어 약어 개념 설명
S SRP 단일 책임 원칙 
(Single responsibility principle)
한 클래스는 하나의 책임만 가져야 한다.
O OCP 개방-폐쇄 원칙 
(Open/closed principle)
“소프트웨어 요소는 확장에는 열려 있으나
변경에는 닫혀 있어야 한다.”
L LSP 리스코프 치환 원칙 
(Liskov substitution principle)
“프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고하라.
I ISP 인터페이스 분리 원칙 
(Interface segregation principle)
“특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.”
D DIP 의존관계 역전 원칙 
(Dependency inversion principle)
프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다

 

 

참고문헌

객체지향 : https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

절차지향 : https://ko.wikipedia.org/wiki/%EC%A0%88%EC%B0%A8%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D#%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC%EC%9D%98_%EB%B9%84%EA%B5%90

추상화 : https://ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81%ED%99%94_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

다형성 : http://www.tcpschool.com/java/java_polymorphism_concept

상속 : https://ko.wikipedia.org/wiki/%EC%83%81%EC%86%8D_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)

캡슐화 : https://ko.wikipedia.org/wiki/%EC%BA%A1%EC%8A%90%ED%99%94

SOLID : https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)