Java

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

개발하는 섭이 2023. 4. 26. 00:52

면접질문에 있어서 기본적인 "객체지향 프로그래밍 무엇인가요?" 라는 질문을 받을 수 있다. 처음 개발공부를 시작할 때 배웠던 기억은 나지만, 제대로 이해되는 개념이 아니라 쉽게 입 밖에 꺼내지지 않을 수 있다. 면접을 떠나 취업을 해도 공부를 해서 알아야 하는 개념이기에 알아두도록 하는 것이 좋다.


 

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 무엇일까?

 

객체지향 프로그래밍은 데이터를 추상화시켜 상태 행위를 가지는 객체를 만들어 그 객체들간의 상호작용 통해서 프로그램을 설계하고 개발하는 프로그래밍 방법을 말한다.

 

장점 단점
재사용성
- 상속을 통해 코드를 쉽게 재사용할 수 있으며, 그로 인해 코드 중복이라는 불팔요한 용량을 줄일 수 있다.

생산성
- 캡슐화로 인해 객체의 독립성이 높아 재사용 부분에 있어서 생산성도 증가된다.

보안성
- 제어자와 메소드를 통해 데이터를 보호하고, 코드의 중복도 제거하여 오작동을 방지할 수 있다.

유지보수
- 기능을 수정할 경우 캡슐화로 인해 주변에 미치는 영향을 최소화하며 활용도 또한 높다
개발 속도
- 모델링 과정에서 시간이 걸려 절차 지향보다는 속도가 느리다

프로그램 용량
- 객체 단위가 많아질 수록 프로그램의 용량이 커진다.

설계 시간
- 클래스, 객체, 상속 등의 구조들을 설계해야 하기 때문에, 설계부분에서 시간이 많이 소요된다.

 

객체지향 프로그래밍(Object-Oriented Programming, OOP)의 4가지 특징

 

캡슐화

- 객체에 필요한 데이터와 데이터를 처리하기 위한 메소드(함수)를 하나로 묶어 그룹화 시켜주는 것을 말한다.

- 외부로부터 데이터를 은닉하여 데이터를 보호한다.

- 객체의 독립성을 높여서 모듈화를 지향하고, 모듈화는 코드 재사용에 있어서 용이하기에 유지보수에 도움을 준다.

 

추상화

- 객체들의 공통적인 특징(속성과 기능)을 추출해서 정의하는 것을 말한다.

- 객체 지향에서는 클래스를 정의하는 것을 추상화라고 생각하면 된다.

  ex) 현대자동차와 쌍용자동차, 이 두개의 자동차 객체가 있다고 해보자.

       이 두 객체의 공통적은 숙성은 자동차(car)라는 속성이기 때문에 공통적인 부분으로 추출해서 정의할 수 있는 것이다.

 

상속

- 상속은 자식클래스(하위클래스)가 부모클래스(상위클래스)로부터 공통된 변수&함수 그리고 인터페이스를 그대로 물려받는 것을 말한다.

- 상속이 필요한 이유는 부모클래스(상위클래스)에서 사용된 기능을 그대로 물려받아 사용함으로써 재사용성을 높여 중복코드를 제거할 수 있다.

 

다형성

- 상속과 연관 있는 개념으로 어느 한 객체가 상속을 통해서 기능을 확장 또는 변경하여 다른 형태(객체)로 재구성하 것을 말한다.

- 다형성은 오버로딩(Overloading)과 오버라이딩(Overriding) 형태로 제공이 된다,

 

오버로딩 : 하나의 클래스에서 같은 이름과 메소드를 사용하지만 다른 용도로 사용하여 결과물을 다르게 구현하는 것을 말한다. 

오버로딩의 조건은 메소드의 이름은 같지만 매개변수의 개수나 타입은 달라야 한다.

 

오버라이딩 : 자식클래스(하위클래스)가 부모클래스(상위클래스)에서 상속받은 메소드를 그대로 재정의하거나, 상황에 맞게 원하는 기능으로 재구성해서 사용하는 것을 말한다.

오버라이딩의 조건은 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.