티스토리 뷰

객체 지향 프로그래밍 4가지 특징 (추상화, 캡슐화, 상속, 다형성) < OOP 객체지향 프로그래밍 특징 4가지, 면접 빈출, 코딩 테스트, 코딩 인터뷰 >


객체지향 프로그래밍의 특징 4가지



앞선 포스팅 (객체지향 프로그래밍 한방에 이해하기)에 이어


"객체 지향 프로그래밍"의 핵심 특징 4가지에 대해 알아보겠습니다.




1. 추상화 (Abstraction)


개념적으로 먼저 설명드리자면 추상화란 쉽게 말해서


"복잡한것은 몰라도 되고, 이것만 써" 라고 표현된 것입니다.



카메라를 예로 들어볼까요?


사진기



카메라에는 사진을 찍는 "버튼"이 있습니다.


사진기에 특별히 관심이 많은 사람이 아니라면, 버튼을 눌렀을때 어떤 원리에 의해서


사진이 찍히며 그것이 메모리에 어떻게 저장 되는지 구체적으로는 알지 못합니다.


그러나, 누구나 셔터를 누르는 것만으로 쉽게 사진을 찍을 수 있죠!


이것이 바로 추상화 입니다.


즉, 객체를 활용할 때 이용자는 객체를 만든 사람이 어떤 원리로 그 객체를 구성했는지 코드를 완벽히 이해하지 않아도 됩니다.


그냥 사용 설명대로 객체를 가져가다 쓰면 되는것이죠!


그러면 복잡한 프로그램을 만들기 위해 여러 객체를 사용하더라도 쉽게 가져다가 쓸 수 있겠죠?





2. 캡슐화 (Encapsulation)


"캡슐화"란 처리하는 함수를 하나로 묶는것이며,


외부로 부터 내부를 감싸 숨기는 "은닉화"의 개념을 포함합니다.


즉, 객체를 통해 같은 기능을 수행하는 함수, 변수들을 묶고,


내부에서만 쓰이는 함수, 변수 등을 만들어 쓸 수 있습니다.




더 쉬운 이해를 위해


앞선 카메라 예제를 다시 가져오겠습니다.

캡슐화


카메라 객체에는 "셔터 닫힘", "메모리 저장" 등 사용자 입장에서


자세히 알 필요없는 복잡한 함수가 숨겨져있습니다.


객체 이용자는 private 처리된 함수에는 접근하지 못하게 막아놓았고,


단순히 "사진 찍는 버튼"만 공개되어 이용할 수 있습니다.




이렇게, "캡슐화"를 통해 객체의 핵심 기능만 쉽게 사용할 수 있으며,


객체에 포함된 정보의 손상과 오용을 막을 수 있습니다.




3. 상속 (Inheritance)


"상속"이란 가지고 있는 것을 물려주거나, 물려받는 것입니다.


공통되는 특징을 상속을 통해 쉽게 전달하여


불필요한 코딩을 피할 수 있습니다.





더 쉬운 이해를 위해


다시 카메라의 사례를 들어보겠습니다.


카메라에서 공통적으로 포함하고 있는


이미 개발한 "촬영 버튼"과 같은 매우 복잡한 기능들을


따로 따로 개발하지 않고, 객체의 상속을 통해 물려받아


훨씬 편리하고 쉽게 구현할 수 있습니다.



즉, 공통된 속성이 있다면 이미 개발한 곳에서 상속하여


개발시간도 단축하고 더 간결한 코드로 표현할 수 있습니다.




4. 다형성 (Polymorphism)

"다형성"의 말을 풀어보면


"다"(Many) + "형"(Form)의 성질입니다.


즉, 같은 성질을 상속받았더라도


경우에 따라 다양한 형태로 표현될 수 있다는 것이죠.



쉬운 이해를 위해


다시 카메라 예제를 통해 보겠습니다.



카메라에서 공통적 개발한


이미 개발한 "촬영 버튼"을 즉석 사진기, 아이폰이 상속하였지만


촬영 버튼을 눌러 동작하는 방식을 다르게 설정할 수 있습니다.



즉석 사진기는 촬영 버튼을 눌러 즉석 사진을 "출력"하는 기능으로 바꿀 수 있고


아이폰은 촬영 버튼을 눌러 메신저를 통해 "전송"하는 기능으로 바꿀 수 있습니다.



즉, 동일하게 상속받은 조작 방법으로 동작시키지만 세부 사항은 다르게 한 것입니다.



이를 통해 좀 더 확장성이 좋은 코드를 작성할 수 있습니다.





지금까지 객체 지향의 핵심 특징 4가지


추상화, 캡슐화, 상속, 다형성에 대해 알아보았습니다.


조금 이해가 되시나요?


도움이 되셨다면, 아래의 하트 혹은 댓글 남겨주세요~


더 좋은 포스팅으로 찾아 뵙겠습니다.


감사합니다.

댓글