혜미의 개발 일지
[JAVA] 객체 지향 OOP 개념 및 장/단점 본문
반응형
자바는 객체 지향 프로그래밍 언어이다.
OOP란 무엇일까? 영어: Object-Oriented Programming, OOP
여기서 말하는 객체란, 객체는 주변에 존재하는 모든 사물(자동차, 건물, 옷 등), 생명체(사람, 고양이 등) 하나하나가 다 객체라고 할 수 있다.
객체지향(OOP) 무엇인가?
- 컴퓨터 프로그래밍의 패러다임 중 하나인 절차지향(C)언어에서는 각 명령어의 실행 순서를 기반으로 동작한다.
- 하지만 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 데이터와 이를 처리하는 루틴들을
하나의 독립된 객체로 동작한다. - 이를 통해 재사용성의 증가라는 이점이 생기며 큰 프로젝트에 많이 사용된다.
객체지향 프로그래밍(Object Oriented Programming/OOP)은 프로그램을 설계하는 개념이자 방법론을 의미한다.
그러니까 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 하나의 로직을 구성하는 프로그래밍 기법이다.
객체지향의 특징 4가지
1. 추상화 (Abstraction)
- 대상의 특성 중 불필요한 부분을 무시하고 필요한 공통점만을 다룬다.
- 그래서 현실의 복잡성을 극복하고 목적에 집중 할 수 있도록 하는 것이다.
- 복잡성을 다루기 위한 추상화의 2가지 차원
- [1] 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통한 단순화
- [2] 중요한 부분의 강조를 위해 불필요한 세부 사항을 제거하는 단순화
- 추상화는 문제 영역과 관점에 의존적이므로
어떤 영역에서는 중요한 속성이 다른 영역에서는 그렇지 않을 수 있다.
따라서 원하는 목적이나 기능에 따라 추상화 모델은 서로 다를 수 있다.
2. 캡슐화 (Encapsulation)
- 객체 스스로가 자신의 상태를 책임지게 하여, 해당 객체의 역할 수행에 집중할 수 있도록 자율성을 높이는 것
- 캡슐화의 2가지 관점
- [1] 상태와 행위의 캡슐화 (데이터 캡슐화) - 객체는 상태와 행동을 하나의 단위로 묶는 자율적 실체
- [2] 사적인 비밀의 캡슐화 (은닉화) - 외부에서 객체의 상태를 마음대로 변경할 수 없도록 보호
- 외부 객체가 메시지를 보냈을 때, 실제 내부에서 상태가 어떻게 바뀌고 어떤 행동을 하는지 스스로만 알 뿐 외부로 노출하지 않는다. 또한 자신의 상태는 스스로만 변경할 수 있도록 한다.
요청자는 ‘무엇’을 요청하는 지만 전달하며, 수신자는 ‘어떻게’ 처리할 지를 결정하면 된다. - 객체의 자율성이 높아질수록 객체간 협력이 유연/간결 해진다. 따라서 재사용성 역시 좋아지게 된다.
3. 상속성 (Inheritance)
- 부모 클래스의 속성과 기능을 상속받아 동일하게 사용하는 것
- 새로운 클래스는 상속을 통해 부모 클래스의 속성과 기능을 물려받는다.
- 범용적인 클래스를 작성한 뒤 상속을 활용하면, 여러 클래스에서 중복되는 속성과 기능을 반복적으로 구현하지 않아도 쉽게 적용할 수 있다.
4. 다형성 (Polymorphism)
- 동일 요청에 대해 서로 다른 방식으로 응답할 수 있도록 만드는 것
- 동일한 요청이 들어왔을 때 그것을 구현하는 방법에 차이를 두어 다른 결과를 만들어내는 것을 말한다.
- 메서드 오버 라이딩과 오버 로딩이라는 형태로 다형성을 지원하며 언어에 따라 오버라이딩만 지원하기도 한다.
- 오버 라이딩 : 상위 클래스에게 상속 받은 동일한 메서드 재정의
- 오버 로딩 : 동일한 메소드가 매개변수의 차이에 따라 다르게 동작
[객체 지향 언어의 장/단 점]
장점
1) 재사용이 용이하다.
- 상속을 통해 프로그래밍시, 코드의 재사용률을 높일 수 있음.
2)생산성 향상
-잘 설계된 클래스를 통해 독립적인 객체를 활용함으로써, 개발의 생산성을 향상시킬 수 있음.
3)자연적인 모델링
- 일상생활에서 쓰는 개념을 그대로 객체라는 구조로 표현하여 개발함으로써, 생각한 것을 그대로 구현가능.
4) 유지보수의 용이성
-프로그램 수정, 추가시 캡슐화를 통해 주변 코드에 영향이 적기때문에 유지보수가 용이함.
단점
1)실행 속도가 느림
- 절차지향언어(C언어 등)은 컴퓨터의 처리구조와 비슷해 실행속도가 빠른 반면, 객체지향언어(C++,JAVA 등)은 상대적ㅇ로 실행 속도가 느리다.
2) 프로그램 용량이 큼
- 객체 단위로 프로그램을 많이 만들다보면, 불필요한 정보들이 같이 삽입될 수 있고, 이는 프로그램의 용량 증가로 이어질 수 있다.
3)설계에 많은 시간 소요
-클래스별로, 객체별로 설계하고, 상속 등의 구조또한 설게하여하기 때문에, 절차지향언어에 비해 설계에 드는 시간이 많다.
참조 사이트
반응형
BIG
Comments