객체지향이란?
객체를 만들고 조작하며 객체끼리 관계를 맺어서 다수의 객체가 함께 수행될 수 있게 하는 것 ↔ 절차 지향 언어
ex) C++, C#, Java, Python 등
절차 지향 언어
각 명령어를 작성한 순서로 실행하는 언어
ex) C언어
객체지향 언어(Object-oriented Language)
컴퓨터 프로그래밍의 한 가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 방법
특징
- 프로그램에 다수의 객체를 만든다.
- 객체의 상호작용을 통해 프로그램을 구현한다.
객체지향 언어의 장점
- 재사용성
상속을 통해 프로그래밍 시 코드의 재사용을 높일 수 있다. - 생산성 향상
잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상할 수 있다. - 자연적인 모델링
우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있다. - 유지보수 우수성
프로그램 수정 시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기 때문에 유지보수가 쉬워서 매우 경제적이라 할 수 있다
객체지향 언어의 단점
- 개발 속도가 느릴 수 있다.
객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소모된다. - 실행 속도가 느릴 수 있다.
절차 지향 언어에 비해 실행 속도가 느리다. - 코딩 난이도 상승
코드가 복잡해져 난이도가 상승할 수 있다.
객체와 인스턴스
클래스 : 설계도
인스턴스 : 실체
객체 : 클래스가 인스턴스가 되었을 때 객체라고 부른다.
객체지향의 4대 특성
1) 추상화 abstraction (모델링)
구체적인 것을 관심 영역(애플리케이션, 서비스 도메인)에 있는 특성만을 가지고 재조합하는 것
2) 캡슐화 encapsulation (정보 은닉)
접근제어자 (Private, Protected, Public)을 사용해 객체 외부에서 내부 데이터의 접근을 통제하는 것
Private 접근제어자
Private을 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며 외부에서 접근할 수 없다.
즉, 같은 클래스에서만 접근을 허용한다.
Protected 접근제어자
부모 클래스에 대해서 Public 멤버처럼 취급되며, 외부에서는 Private 멤버처럼 취급된다.
Protected 멤버에 접근할 수 있는 영역
- 이 멤버를 선언한 클래스의 멤버
- 이 멤버를 선언한 클래스가 속한 패키지의 멤버
- 이 멤버를 선언한 클래스를 상속받은 자식 클래스의 멤버
Public 접근제어자
Public을 사용하여 선언된 클래스 멤버는 외부로 공개되며, 프로그램 어디에서나 해당 객체에 직접 접근할 수 있다.
Public 메서드는 Private 멤버와 프로그램 사이의 인터페이스 역할을 수행한다고 할 수 있다.
3) 상속성 inheritance (재사용 + 확장)
상위 개념의 특징을 하위 개념이 물려받는 것
상속관계에서 만족해야 하는 조건
- 하위 클래스는 상위 클래스이다.
- 하위 클래스는 상위 클래스의 한 종류이다.
4) 다형성 polymorphism
오버 로딩
메서드의 이름만 같고 반환형, 파라미터의 개수 등은 다른 것.
아래 예제에서는 함수 이름은 같지만 파라미터 개수가 다른 것을 알 수 있다.
(예제에서는 리턴 타입은 같지만 달라도 된다.)
public int add (int a, int b)
{
return a + b;
}
public int add (int a, int b, int c)
{
return a + b + c;
}
오버 라이딩
상위 클래스의 메서드와 같은 시그니처(이름, 반환형, 인자)로 메서드를 재정의하는 것.
즉, 이름, 반환형, 인자 개수는 같아야 하지만 함수 내부 내용은 달라도 된다.
//상위 클래스
public int add (int a, int b)
{
return a + b;
}
//하위 클래스
public int add (int a, int b)
{
return a * b;
}
참고사이트
'개발공부 > 디자인패턴' 카테고리의 다른 글
[디자인패턴] 전략패턴 (Stratege Pattern) (0) | 2023.02.01 |
---|---|
[디자인 패턴] 상태 패턴 (State Pattern) (0) | 2023.01.31 |
옵저버 패턴(Observer Pattern) / 관찰자 디자인 패턴 (0) | 2022.01.10 |
팩토리 메서드 패턴 (Factory Method Pattern) 설명과 예제 (0) | 2022.01.04 |
MVVM 패턴이란? (0) | 2021.10.26 |