UpDown Dev Story
객체 지향 프로그래밍의 정의 와 특징 본문
정의
- 객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
- 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.
유연하고 변경이 용이?
- 레고 블럭 조립하듯이
- 키보드 마우스 갈아 끼우듯이
- 컴퓨터 부품 갈아 끼우듯이
특징
추상화
- 어떤 영역에서 필요로하는 속성이나 행동을 추출하는 작업
- 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것
캡슐화
- 데이터(속성, 필드)와 데이터를 다루는 방법(메서드)을 결합시켜 묶는 것
- 특정 객체가 독립적으로 역할을 제대로 수행하기 위해 필요한 데이터와 기능을 하나로 묶어 관리한다
- 캡슐화된 객체의 세부 구현이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급효과가 적다
- 세부 구현 (내부적으로 어떠한 자료구조, 어떠한 방식으로 구현했는지를 감춘다)
- 세부 구현에 독립적으로 제공되는 메서드만 이용하기 때문에 결합도 낮아진다
- 캡슐화는 정보 은닉을 통해 높은 응집도와 낮은 결합도를 갖도록 한다
- 캡슐화된 객체들은 재사용이 용이하다
정보은닉
- 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통해서 접근을 허용하는 것
- 각 객체의 수정이 다른 객체에게 주는 영향을 최소화함 (응집도 높이고, 결합도 낮춤)
- 외부 객체가 특정 객체의 데이터와 함수를 직접 접근하여 사용하거나 변경하지 못하므로 유지보수와 소프트웨어 확장시 오류 최소화
상속
- 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 상속을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고도 즉시 자신의 속성으로 사용 가능
- 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용 가능
- 상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체와 클래스의 재사용, 즉 소프트웨어 재사용을 증대시키는 중요한 개념
다형성
- 같은 자료형에 여러가지 객체를 대입하여 다양한 결과를 얻어내는 성질
- 하나의 타입으로 다양한 실행 결과를 얻을 수 있으며, 객체를 부품화하여 유지 보수를 용이하게 함
- 여러가지 형태를 가질 수 있는 것
- 하나의 메소드나 클래스가 있을 때, 이것들이 다양한 방법으로 동작하는 것 (대표적으로 오버라이딩있다)
- 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것 (부모타입 참조변수로 자식 타입 인스턴스 참조 가능, 반대는 불가) : 제일 깔끔한 정의인듯!
장점
- 소프트웨어 공학의 관점에서 볼 때 S/W의 질을 향상하기 위해 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 지향해야 하는데, OOP의 경우 하나의 문제 해결을 위한 데이터를 클래스에 모아 놓은 데이터형을 사용함으로써 응집력을 강화하고, 클래스간에 독립적인 디자인을 함으로써 결합력을 약하게 한다.
'Java' 카테고리의 다른 글
자바(Java) 스레드(Thread) 에 대해 알아보자 (0) | 2021.07.08 |
---|---|
자바(Java) 에러(Error) 와 예외(Exception)에 대해서 알아보자 (0) | 2021.07.08 |
자바의신 정리해봅시다 Volume 2 (21장 ~ 28장) (4) | 2021.06.29 |
자바의신 정리해 봅시다 Volume 1 (11장~20장) (2) | 2021.06.29 |
자바의신 정리해 봅시다 요약 1장~10장 (0) | 2021.06.27 |
Comments