버그 잡이

[개발자 면접]객체지향이란? + 객체지향의 3요소 본문

카테고리 없음

[개발자 면접]객체지향이란? + 객체지향의 3요소

버그잡이 2020. 5. 20. 12:03

객체지향이란?

 

컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. - 위키백과

 

- 객체간의 메시지 교환이라는 현실을 추상화한 프로그래밍으로 보다 직관적인 코드 이해 및 작성이 가능합니다.

- 이러한 객체지향 프로그래밍으로 인해 보다 구조적인 프로그래밍이 가능해져 유지보수가 쉬워졌습니다.

 

 

 

 

'이렇게 개념적인 객체지향은 알겠는데 그래서 객체지향 프로그래밍은 뭐냐?' 라는 질문이 나올 수 있습니다.

 

- 이에 대한 답변을 하자면 "객체지향 프로그래밍의 3요소가 어우러진 것이 객체지향 프로그래밍입니다."

 

- 객체 지향 프로그래밍을 한 문장으로 설명하기는 쉽지 않습니다. 그렇기 때문에 객체지향 프로그래밍의 3요소를 통해서 객체지향 프로그래밍을 이해하는 것이 좋습니다. 

 

 

 

 

 

객체지향 프로그래밍의 3요소

 

1) 캡슐화

 

- 내부적으로 기능을 어떻게 구현하는지 감추는 것

- 캡슐화를 통해 객체간의 의존성을 관리할 수 있고 이를 통해 결합도가 낮은 객체를 만들 수 있습니다.

- 그 결과 유지보수가 쉬운 코드를 만들 수 있습니다.

- (객체를 수정할 일이 있을때 다른 객체에 영향을 주지 않으니 그것만 변경하면 되서 쉬운 유지보수가 가능한것입니다.)

- 대표적인 예로 private 과 같은 접근제어자를 활용해 접근을 제한하는 방법이 있습니다.

 

 

2) 상속

 

- 부모 클래스의 변수와 메소드를 자식 클래스가 물려 받아서 쓸 수 있는 것.

- 기능을 쉽게 가져다 쓸 수 있고 불필요한 코드를 줄일 수 있어 보다 효율적인 코딩이 가능합니다.

 

 

 

3) 다형성

 

- 같은 코드가 다른 행위를 하는 것을 말한다.

 

( 다형성은 개념이 좀 모호한 것 같습니다. 예시를 통해 먼저 알아보겠습니다.)

 

예시1)

- 탱크 게임이 있습니다. 거기에는 tank 라는 객체가 있고 이를 상속받는 주인공tank와 적tank 객체가 있습니다. 

- 이들은 모두 tank 객체의  attack()이라는 메서드를 상속받아서 구현하는데 서로 다르게 구현합니다 주인공tank의 attack()은 전의 위치를 입력하면 일정 데미지를 주는 로직이고 적tank는 주인공 tank가 일정 범위에 들어왔을때 일정 시간 간격으로 특정 데미지를 주는 형식입니다.

 

예시2)

- 계산기 기능 중 plus()라는 더하기 메서드가 있습니다. plus(1,2)처럼 두 개의 매개변수가 들어가서 계산을 수행할 수도 있고 plus(1,2,3) 처럼 3가지 매개변수가 들어가서 계산을 수행할 수도 있습니다. 

 

 

첫번째 예시는 Overriding의 개념입니다.

상속받은 메소드 내의 로직을 새롭게 정의하는 것을 말합니다. 이처럼 같은 이름이지만 구현하는 클래스마다 다른 역할을 하는 것입니다.

 

두번째 예시는 Overloading의 개녑입니다.

오버로딩은 하나의 클래스에서 같은 이름의 메소드를을 여러 개 가질 수 있게 하는 것이지요. 

다양한 매개변수를 처리할 수 있게 해주기 위함입니다.

 

 

이렇게 객체지향에서 다형성은 위와 같이 크게 두가지 형태로 구현됩니다.

 

 

 

"그렇다면 이러한 다형성을 왜 구현했을까요?"

 

위의 예시를 다시 살펴봅시다.

 

첫번째 예시를 보면 상속을 통해서 기능을 쉽게 확장 및 변경할 수 있게 해주고

 

두번쨰 예시를 보면 매개변수가 바뀔때마다 새로운 매서드 명으로 처리해주지 않아도 되어 코드의 양을 줄여주는 장점이 있습니다. (다형성이 없다면 plusWithTwo(), plusWithThree() 처럼 나눠서 처리를 해줘야 하고 이는 코드를 아주 복잡하게 만들 것입니다.)

 

 

 

 

[결론]

 

- 객체지향은 '객체'를 하나의 프로그램 단위로 보는 프로그래밍 패러다임입니다.

 

- 이를 통해서 보다 구조적인 코딩을 할 수 있고(유지보수 쉬움), 현실을 반영한 직관적인 코딩을 가능하게 합니다.

 

 

 

 

*참고 자료

- https://brunch.co.kr/@kd4/4

 

 

 

반응형
Comments