- 프로그램 = 객체들의 집합 = 클래스들의 집합
- 객체-지향 프로그래밍(OOP) 언어: 프로그램은 실세계 객체들을 표현하고 시뮬레이션 하는 것
- 실체 변수(instance varaible): 클래스 내에서 정의된 변수
- 객체 참조 변수(object reference varaible): 객체를 가리키기 위한 변수, 객체가 생성된 것은 아님!
- 객체는 new로 생성 (생성하면 각 객체를 위한 기억 공간이 힙 영역에 할당됨)
- 추상자료형(abstract data type): 데이터와 관련된 연산을 묶어 캡슐화하여 정의한 자료형
- 캡슐화: 일반적으로 연관 있는 필드변수와 메소드를 클래스로 묶고 내부 구현내용을 외부에 감추는 것
- 필요한 이유: 보호. 외부의 잘못된 사용으로 객체가 손상되지 않게 하기 위해서
- 객체의 외부적 관점: 객체는 하나의 캡슐로 서비스(객체에 대한 창구)를 제공
- 객체의 필드 변수는 공용으로 선언하면 안됨
- 공용 메소드(=서비스 메소드): 객체의 서비스를 제공하는 메소드
- 지원 메소드: 서비스 메소드를 지원하는 메소드. 공용이 아님(private, protected)
- 정적 변수(=클래스 변수)
- static으로 선언됨
- 객체가 아니라 클래스 내에 변수를 위한 기억공간이 생성됨
- 한 클래스의 모든 객체들이 공유하여 사용
- 정적 메소드(=클래스 메소드)
- static으로 선언됨
- 객체를 생성하지 않고도 클래스 이름을 이용하여 호출 가능 -> 그래서 실체 변수는 사용 못함. 정적 변수만 사용 가능
- 제네릭 프로그래밍: 타입 매개변수 이용해서 여러 타입에 적용 가능한 포괄적 토드
- 제네릭 클래스
- 제네릭 메소드
public static <T> Box<T> boxing(T t){
Box<T> box= new Box<T>();
box.set(t);
return box;
}
- python은 실체 변수(=객체 변수)를 선언하지 않고 초기화
- 객체 변수
- 클래스 변수 (클래스 변수는 초기화함! 클래스 내에 초기화한 변수가 클래스 변수임)
- 접근 지정자 별도로 없음
- 밑줄 두개로 시작한 이름: private
- 한 개의 밑줄로 시작한 이름: protected
- 밑줄로 시작안하는 이름: public
- C++에서는 java와 달리 클래스 타입으로 변수를 선언해도 객체가 생성됨. new로 해도 생성됨!
- 템플릿(template): C++의 제네릭 프로그래밍
template <typename T>
T sum(T a, T b){
return a+b;
}