객체지향 프로그래밍(OOP)가 무엇인지 그 특징은 어떠한지 살펴볼게요.
객체지향 프로그래밍의 정의
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. - 위키 백과
위키에 따르면 객체 지향 프로그래밍은 절차지향 프로그래밍과 달리 "객체"들로 시선을 달리했다고 설명합니다.
뭐.. 거의 이름을 풀어서 설명한거랑 똑같죠.
자바 입문서들에서 공통적으로 객체지향은 실제세계를 모델링하여 소프트웨어를 개발하는 방법이라고 표현합니다.
절차지향의 대표적 언어인 C언어는 그럼 실제세계를 모델링하기 어렵나요??
그렇습니다. C언어에는 구조체가 있지만 그 구조체(주체)가 행하는 행동을 연결시키기 어렵습니다.
다만 자바에서는 클래스 단위로 접근하기에 조금 더 수월하다는 장점이 있죠(클래스를 인스턴스화 시킨 것이 바로 '객체'입니다).
또한 프로젝트 단위로 보면 마치 컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 접근을 해야합니다.
코드의 모든 부분을 뜯어고치는게 아니라 조립형으로 확장해나가는 방식이죠.
코드의 재활용성이 높고 디버깅이 쉬운 장점이 있으며 처리속도가 절차지향보다 느리고 설계에 많은 시간이 소요되는 단점이 있습니다.
객체지향 프로그래밍의 특징
재밌는게 객체지향 프로그래밍 특징이라고 검색해보시면 사람들마다 범위가 조금 다르더라구요??
저는 추상화,상속,다형성 정도를 다뤄보겠습니다.
추상화
자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다. 자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다. 추상 자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있다. 객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드(함수), 메소드의 호출을 생성자라고 한다. - 위키백과
제가 원래 알고 있던 추상화는 저번에 알려드린 추상 메서드나 앞으로 알려드릴 인터페이스마냥 객체의 공통적인 속성과 기능을 추출하여 정의하는 것입니다. 다시 말하면 실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요없는 특성을 제거하는 과정이 추상화라고 알고 있는데요.
아마도 위키백과에서 언급하는 중요한 정보만을 표현한다는 부분이 공통적인 부분으로 묶었다~
이런게 아닐까 생각합니다.
캡슐화
관련된 데이터와 알고리즘(필드와 메서드)이 하나의 묶음으로 정리된 것.
데이터를 감추고 외부세계와는 메서드를 통해 상호작용합니다.
하지만 무작정 묶으면 되는 것이 아니라 객체가 맡은 "역할"을 수행하기 위한 단위로 묶으셔야 합니다.
상속
공통적인 부분들을 묶었다면 그 클래스를 상속받음으로 인해 코드 재활용이 가능해집니다.
다형성
많을 다, 형태 형.
같은 이름인데 형태가 다양한 특성입니다.
오버라이딩이나 오버로딩이 여기에 해당됩니다.
오버라이딩은 상속 관련 포스팅에서 다뤘었는데
부모 클래스랑 하위 클래스에 동일한 이름의 메서드가 있고 얘네가 기능이 다른 것을 의미합니다.
오버로딩은 얘도 같은 이름의 메서드가 있구요.다만 그 메서드의 매개 변수의 개수나 자료형에 따라서 다르게 정의하면 이건 오버로딩입니다.
'Java' 카테고리의 다른 글
[Java] 인터페이스에 대하여 (0) | 2021.05.10 |
---|---|
[JAVA] 패키지 (0) | 2021.05.03 |
[JAVA] 자바 상속 (0) | 2021.04.26 |
테스트 코드 작성 범위 (0) | 2021.04.21 |
[JAVA] 클래스 (0) | 2021.04.19 |