Programming/Java
Java - 객체 지향 프로그래밍 (OOP)
방구석코딩
2020. 7. 2. 19:43
- 객체 지향 프로그래밍 (OOP)
- Object Oriented Programming 의 약자이다.
- 컴퓨터 프로그래밍의 설계 방법론이자 개념의 일종이다.
- 프로그램을 단순히 데이터와 처리 방법으로 나누는게 아닌, 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다.
- '객체'란 하나의 역할을 수행하는 '메소드와 변수의 묶음'이다.
- 구성 요소로는 클래스(Class), 객체(Object), 메소드(Method), 메세지(Message)로 구성되어있다.
- 클래스(Class)
- 같은 종류의 집단에 속하는 속성(Attribute)과 행위(Method)를 정의한 것으로, 객체 지향 프로그램의 기본적인 사용자 정의 데이터형이라 할 수 있다.
- 클래스는 프로그래머가 아니지만 해결 해야할 문제가 속하는 영역에 종사하는 사람이라면 사용할 수 있고, 다른 클래스 또는 외부 요소와 독립적으로 디자인 해야한다.
- 객체(Object)
- 클래스의 인스턴스이다.
- 클래스라는 일종의 설계도를 기반으로 실제로 생성된 그 실체가 바로 객체이다.
- 객체는 자신 고유의 속성(Attribute)을 가지며 클래스에서 정의한 행위를 수행할 수 있다.
- 메소드(Method)
- 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 행위라할 수 있다.
- 메소드는 한 객체의 서브루틴 형태로 속성을 조작하는데 사용된다.
- 메세지(Message)
- 메세지는 객체간의 통신이 이루어지는 방법이다.
- 메세지를 통해 메소드가 호출되어 사용된다.
- 클래스(Class)
2. 객체 지향 프로그래밍 특징
- 추상화(Abstraction)
- 객체에서 공통된 속성과 행위를 추출하는 것을 추상화(Abstraction)라고 한다.
- 중요한 특징만을 포함하도록하고, 간단한 모델로 작성하는 방법이다.
- 복잡한 모델을 보다 단순한 모델로 변환하는 작업이다.
- 캡슐화(Encapsulation)
- 변수와 함수를 하나의 단위로 묶는 것을 의미한다.
- 객체의 데이터를 외부에서 직접 접근하지 못하게 막고, 함수를 통해서만 조작 가능하게한다.
- 캡슐화는 정보은닉을 통해 높은 응집도와 낮은 결합도를 갖도록 한다.
- 응집도
- 클래스나 모듈속의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.
- 모듈이 높은 응집도를 가질수록 좋다.
- 결합도
- 특정 기능을 실행하는데 다른 클래스나 모듈들에 얼마나 의존적인지를 나타낸다.
- 모듈이 낮은 결합도를 가질수록 좋다.
- 정보은닉(Information Hiding)
- 정보를 외부에서 접근하지 못하도록 제한하는것을 말한다.
- 접근제한자 private를 인스턴스 변수에 선언하여 외부에서 직접 접근하는것을 막는다.
- 응집도
지시자 | 접근 허용 범위 | |||
클래스 내부 | 패키지 내부 | 상속받은 클래스 | 그 이외 부분 | |
private | 가능 | 불가능 | 불가능 | 불가능 |
default | 가능 | 가능 | 불가능 | 불가능 |
protected | 가능 | 가능 | 가능 | 불가능 |
public | 가능 | 가능 | 가능 | 가능 |
< 접근제한자 종류 & 접근 허용 범위 >
- 다형성(Polymorphism)
- 다형성이란 같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질을 의미한다.
- 대표적으로 오버로딩(Overloading), 오버라이딩(Overriding)이 있다. (이견이 존재하지만, 다형성의 성질은 비슷하다.)
- 오버로딩(Overloading)
- 하나의 객체에서 이름이 같은 메소드를 여러개 정의하여 사용하는것이다.
- 단, 메소드에 전달되는 인자(parameter)의 종류와 갯수는 달라야한다.
- 오버라이딩(Overriding)
- 상속받은 하위 객체가 상위 객체의 메소드를 새로 정의하고 사용하는것을 말한다.
- 하위 객체의 메소드 이름과 인자(parameter)값의 타입은 반드시 상위 객체의 메소드와 일치해야한다.
- 오버로딩(Overloading)
- 상속성(Inheritance)
- 상속은 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 말한다.
- 기능의 일부분을 변경해야 할 경우 자식 클래스에서 상속받은 해당 기능만을 수정해서 다시 정의하게 되는데, 이러한 작업을 오버라이딩(Overriding)이라고 한다.
- 상속은 캡슐화를 유지하면서도 클래스의 재사용이 용이하도록 해준다.