* 객체화((instantiation) : 사례를 만들어내는 것, 클래스로부터 오브젝트를 만들어낸다. 출처 : 객체지향 프로그래밍
ㅣ추상화 Abstraction
- 객체 사용과 무관한 세부 구현을 감춤
논문 앞에 Abstract이 있다. 요약을 읽으면 대략 알 수 있다.
- 사용자는 실제 구현을 보지 않고 객체가 제공하는 기능에 집중(What > How)
추상 클래스(abstract class), 인터페이스(interface)등의 지원 - 마우스도 하나의 인터페이스일 수 있다. - 제조사마다 구현하는 방법이 다를 수 있다.
행동(action) 형태만 제공
행동의 구현은 상속 또는 구현하는 클래스에 정의
출처 : 객체지향 프로그래밍
l 캡슐화 Encapsulation
- 추상화랑 비슷하지만 목적이 다르다.
- 캡슐화는 외부로부터 내 자신을 지키는 것이다. 나를 함부로 못 써!
: 객체의 내부 상태를 외부로부터 감춤
- 클래스에 정의된 행동(action)을 통해서만 객체 내부 정보에 접근을 허용
- 인터페이스를 제공해줘야 한다.
접근 지정자(access modifier)를 통해 캡슐화를 수행 - public : 접근 제한 없음 - protected : 동일한 패키지 + 자식 클래스만 접근 가능 - private : 클래스 내부에만 접근 가능 - default : 자바에서 사용 / 동일한 패키지 내의 클래스만 접근 가능
c++에서는 모든 것이 private다.
출처 : 객체지향 프로그래밍
l 상속 Inheritance
- 기존 클래스로 부터 새로운 클래스를 파생
현실 세계의 상속과 동일하다.
=> 세부 분류를 만들어낸다.
- 기존 클래스의 특성 및 행동을 물려받음 + 자신만의 특성과 행동을 정의
책상 <= 전동책상(+ 높이조절) 자동차 <= 전기차(+ 전기 충전)
부모 클래스 : 상속해 준 클래스 - parent or super or base class
자식 클래스 : 상속 받은 클래스 - child or sub or derived class
출처 : 객체지향 프로그래밍
ㅣ 다형성 Polymorphism
: 다양한 형태나 의미를 가질 수 있는 특성
-> 여러 다른 객체를 하나의 타입으로 표현할 수 있다. (트럭, 승용차, 전기차 => 자동차)
-> 여러 다른 함수 호출을 하나의 호출문으로 표현할 수 있다.
정적 다형성 static polymorphism - 형태나 의미가 컴파일 시점에 결정
동적 다형성 dynamic polymorphism - 형태나 의미가 실행 시점에 결절
- 프로그램을 효율적이고 아름답게 만들어주는 정수
- 정말정말 훌륭하다. 실력이 늘수록 불만이 생긴다. 그때 다형성을 찾게 된다.
출처 : 객체지향 프로그래밍
객체지향 언어의 장점
코드의 재사용성이 높음 - 기존 코드를 이용하여 새로운 코드를 작성하기 용이함
코드의 관리가 쉬움 - 객체간의 관계를 이용하여 적은 노력으로 쉽게 코드 변경이 가능
신뢰성 높은 프로그래밍이 가능 - 캡슐화를 통해 데이터를 보호하고 올바른 값을 유지
클래스와 객체의 용도
클래스는 객체의 형태를 정의해 높은 것 - 객체의 특성과 행동을 정의하는 '틀' - 객체는 생성하기 위해 사용
객체는 실존하는 사물 또는 개념 - 상태와 행동을 갖는 독립적인 개체 - 클래스로부터 객체화를 통해 생성
세 가지 변수 종류
인스턴스 변수 - 객체의 상태를 구성하는 변수
스태틱 변수 - 클래스에 귀속되어 해당 클래스의 모든 객체가 공유하는 변수
로컬 변수 - 해당 블록({...}) 내에서 정의되며, 블록 내에서만 접근 가능한 변수
두 가지 메소드 종류
인스턴스 메소드 ‣ 객체의 행동을 정의한 함수 ‣ “참조변수.인스턴스메소드명” 으로 접근 : Car c; c.pushAccel(); ‣ 수신자 객체가 this 변수로 전달되어, 객체의 상태 변화가 가능
스태틱 메소드 ‣ 클래스에 귀속된 행동 ‣ “클래스이름.스태틱메소드명” 으로 접근 : Car.honk(); ‣ 수신자 객체가 없으므로, 객체의 상태 변화 불가 (i.e. 스태틱 외의 멤버 변수에 접근 불가)