객체 지향 프로그램의 특징

조현태·2023년 3월 21일
0

Java를 공부하면서 객체 지향의 특징에 대해서 배우고 최근 면접에서 객체지향의 4가지 특징에 대해서 질문은 받은 적이 있어서 이번 블로그에서는 객체 지향 프로그램에 대해서 설명해드리겠습니다.

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

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.

-C#, Java, JavaScript, Python 등이 객체 지향 언어이고,
객체 지향 언어가 아니여도 객체 지향 언어 방식을 지원하는 경우가 많습니다.


객체와 클래스란?

먼저 객체와 클래스에 대해서 간단히 설명하자면,
게임을 만든다고 하면 플레이어가 필요합니다.

여러 플레이어를 만들면 위와 같은 코드가 됩니다.
같은 속성을 가지고 다른 값을 가지고 있는 플레이어들입니다.
이렇게 코드를 만들면 플레이어의 수가 늘어나면 코드도 길어지고
수정, 추가, 오류를 잡아내기가 매우 힘들어집니다.

이때, 위와 같이 플레이어 공장을 만들면 쉽게 해결할 수 있습니다.
공장을 수정, 추가하면 모든 플레이어들에게 적용이 됩니다.

여기서 플레이어는 객체, 공장은 클래스입니다.
ex) 쿠키 = 객체, 쿠키 틀 = 클래스

그리고 클래스(공장)에 함수를 추가한다면 모든 플레이어들은 해당 함수를 사용할 수 있게 됩니다.


객체지향의 4가지 원칙

추상화 (Abstraction)

구현의 세부정보를 숨길 수 있습니다.
예를 들어, 우리는 자동차의 엑셀, 브레이크, 엔진(인터페이스) 등을 사용할 수 있지만 어떤 원리인지는 알 수 없고 몰라도 사용하는데 문제가 없습니다.

이 특성의 장점은 구현의 세부정보가 변경되어도 인터페이스를 사용하는 사람들에게는 영향이 가지 않는다는 점입니다.


캡슐화 (Encapsulation)

데이터와 그 데이터를 사용하는 함수들을 캡슐(클래스)에 가두는 것입니다.
캡슐화를 통해서 숨길 부분이나 공개할 부분을 정할 수 있고 this 키워드를 사용하여 직접 접근이 가능합니다.


상속 (Inheritance)

위의 코드처럼 공통된 부분인 firstNamelastName 같은 변수들이 많을 경우, 이를 부모 클래스로 만들고 상속시킬 수 있습니다.

Person 클래스에 firstNamelastName 의 변수를 저장하고 SayHi함수를 만들었습니다.
extends를 사용를 사용하여 Person 클래스를 상속하면 부모 클래스의 모든 속성과 함수를 사용할 수 있습니다.
그리고 각각 클래스의 고유한 속성이나 함수도 추가할 수 있습니다. (개성 부여)


다형성(Polymorphism)

한국인 클래스는 Person 클래스를 부모 노드로 하지만 sayHi 함수를 오버라이딩(Overriding)함으로써 "안녕"이라는 반환값을 가질 수 있습니다.

즉, 한국인 클래스의 객체와 Person 클래스의 객체는 같은 sayHi 함수를 실행해도 다른 반환값을 얻을 수 있습니다.
이것이 다형성입니다.

여기서 주의할 점은 부모 클래스인 Person 클래스의 반환값인 String을 지켜야합니다.
한국인 클래스에서 Interger로 값을 반환하려고 하면 오류가 발생합니다.

이런 특징 덕분에 기본 틀을 유지하면서 다양한 객체들을 만들어낼 수 있습니다.


+) 추상화 vs 캡슐화

제가 이해한 바로는 만약 건조기를 사용할 때, 건조기의 건조 버튼이 어떻게 작동하는지는 알 수 없지만 사용하는데 문제가 없는 것이 추상화이고,
건조기의 버튼과 인터페이스는 공개하고 내부적인 부분은 감추는 것이 캡슐화라고 생각합니다.


출처 : 노마드 코더 Youtube
https://youtu.be/IeLWSKq0xIQ
https://youtu.be/cg1xvFy1JQQ

0개의 댓글