본문 바로가기

Computer Science

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

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

 

객체지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다.

 

초기 컴퓨터 프로그래밍은 절차 지향 프로그래밍으로 어떠한 문제를 해결하는 순서대로 프로그래밍을 했었다.

프로그래밍이 점점 복잡해지고 문제가 발생하여 이를 해결하기 위해 "함수" 를 도입한 기능적 프로그래밍이 나오게되었다. 함수를 사용하여 기능을 구분하여 작게 나뉘어서 구분하기 시작하였다. 

하지만 기능적 프로그래밍으로도 모든 문제를 해결할 수 없었고 이를 위해 객체지향 프로그래밍이 대두하게 되었다.

 

객체지향 프로그래밍은 작은 문제를 해결하도록 하는 객체를 만들고 해당 객체들을 조합하여 큰 문제를 해결하는 방식이다.

 

객체

객체란 대상을 나타내는 단어이다

예를 들면, 도로 위에 자동차들은 각각 하나의 객체라고 볼 수 있다.

 

 

즉, 객체지향 프로그래밍이란 객체를 기준으로 코드를 나누어서 객체에 관점에서 구현하는 프로그래밍 패러다임이다.

대표적인 프로그래밍 언어로 Java가 있다.

 

 

 

OOP의 특징 


1. 캡슐화(Encapsulation)

 

- 코드를 수정없이 재활용 하는 것.

- 하나의 객체가 필요한 특정한 변수나 메소드를 하나로 묶는 것을 의미.

 

프로그램 코드를 재활용하기 위해서는 기능(함수/메소드)과 특성(변수)이 분산되어 있으면 재활용하기 힘들기 때문에 이를 한곳으로 묶고 분류할 필요가 있다.

 

클래스&인스턴스

위에서 분류한 기능과 특성을 클래스(Class)라는 집단으로 만든 후 이 클래스를 실체화(Instance)하면 객체(Object)가 된다.

예시).    붕어빵 : 객체 
              붕어빵 틀: 클래스

 


2. 추상화(Abstract) 

 

- 목적과 관련없는 부분을 제거하여 필요한 부분만 표현하기 위한 개념 

- 공통의 속성이나 기능을 묶어 이름을 붙이는 것

 

자동차나 스마트폰에는 많은 모델들이 있다. 하지만 각 모델들마다 특징이 다르지만 공통적인 특징을 가지고 있고 필수적으로 필요한 메소드, 특징들이 있다. 이러한 특징들을 분류하는 과정을 추상화 라고한다.

3. 다형성(Polymorphism)

- 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 하는 것

- 형태는 같은데 다른 기능을 하는 것을 의미한다.

 

다형성 사용이유 : 같은 이름의 메소드를 사용하기때문에 인터페이스를 유지하고 메서드이름을 낭비하지 않게된다.

 

 

Overriding & Overloading

OOP에서 다형성을 만드는 방법은 Overriding과 Overloading 두가지가 있다.

 

Overriding, 오버라이딩

- 부모클래스에서 상속받은 자식클래스에서 부모클래스의 메소드를 자식클래스에서 맞게 재정의 하는것을 말한다.

 

Overloading, 오버로딩

- 같은 이름의 메서드를 사용하지만 메소드마다 다른 용도로 사용되어 결과또한 다르게 구현하는 개념

- 메소드 이름이 같지만 매개변수의 갯수, 데이터 타입이 다르면 오버로딩이 적용된다.

 

4. 상속(Inheritance)

 

- 기존 상위클래스에 근거하여 새로운 클래스를 정의하는 것

- 부모 클래스의 기능을 재사용할 수 있으며 새로운 기능을 정의하는 것도 가능하다. 

 

상속이 필요한 이유:  - 코드의 중복을 없애기 위해서
                                - 상속관계를 맺으면 자식 객체를 생성할때 부모의 속성을 자동으로 물려받기때문에 자식에서 다시 정의할 필요없음.

예시) 포유류               - 부모클래스
          강아지, 호랑이 - 자식클래스