객체 지향 이론의 관점
소프트웨어 객체는 현실 객체를 모방한 것이 아니라 은유를 기반으로 재창조한 것이다.
- 현실 객체 : 객체
- 은유 : 클래스
- 소프트웨어 객체 : 인스턴스
객체
- 사전적 정의 : 실제로 존재하는 것
- “존재하는 것”은 사물 뿐만이 아니라 개념도 포함한다.
- 객체는 속성과 기능의 집합이다.
- 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
- 객체가 가지고 있는 속성과 기능을 그 객체의 멤버라고 한다.
객체의 속성 (property) = 멤버변수, 특성, 필드, 상태
객체의 기능 (function) = 메서드, 함수, 행위
클래스
- 정의
- 객체를 프로그램상에서 정의한 것
- 그렇기 때문에 클래스에는 객체의 모든 속성과 기능이 정의되어있다.
- 객체의 설계도 또는 틀
- 소프트웨어 객체는 클래스를 통해 생성되기 때문이다.
- 클래스는 객체 그 자체가 아니다.
- 우리가 자동차의 설계도를 자동차라고 부르지 않는 것과 같은 이치다.
- 객체를 프로그램상에서 정의한 것
인스턴스
- 정의 : 클래스에 정의된 내용대로 메모리에 생성된 소프트웨어 객체
- 클래스의 인스턴스화 : 클래스로부터 객체를 만드는 과정
- 인스턴스화 시, 클래스에 정의된 속성과 기능을 가진 인스턴스가 만들어진다.
인스턴스의 생성과 사용
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체 생성 후, 객체의 주소를 참조변수에 저장
- 생성
- 참조 변수를 통해서만 다룰 수 있다. (메모리 공간 접근)
- 참조변수의 타입은 인스턴스의 타입과 일치해야한다. (저장 공간 확보)
- 선언
- 변수 이름을 통해 할당된 메모리 공간에 접근 가능
- 메모리 공간에 변수 타입에 맞는 크기의 저장 공간 확보
- 초기화
- 변수 선언으로 할당된 공간에 처음으로 값을 저장하는 행위
- 일반적으로 선언과 동시에 초기화한다. (명시적 초기화)
- 사용
- 같은 클래스로부터 생성된 경우 (= 타입이 같은 경우)
- 각 인스턴스의 멤버변수(속성) : 서로 다른 값 유지 가능
- 메서드 : 모든 인스턴스의 메서드 내용 동일
- 참조 변수에는 하나의 값(주소)만 저장될 수 있다.
- 둘 이상의 참조변수가 하나의 인스턴스를 가리키는 것은 가능하다.
- 하나의 참조변수로 여러 개의 인스턴스를 가르키는 것은 불가능하다.
- 많은 수의 객체를 다뤄야할 땐, 객체배열을 사용하면 편리하다.
- 같은 클래스로부터 생성된 경우 (= 타입이 같은 경우)
프로그래밍적인 관점에서의 클래스
- 데이터와 함수의 결합
- 서로 관련된 변수들과 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것
- 데이터와 함수의 관계가 깊기 때문에 (= 함수는 주로 데이터를 가지고 작업한다.)
- 사용자 정의 타입
- 사용자 정의 타입
- 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것
- 객체지향언어에서는 클래스가 곧 사용자 정의 타입이다.
- 사용자 정의 타입
레퍼런스
- 자바의 정석 3판 p.231 ~ p.245
- 객체지향의 사실과 오해 p.188
- https://www.slipp.net/questions/126
'Develop > Java' 카테고리의 다른 글
추상 클래스와 인터페이스 (0) | 2023.04.04 |
---|---|
다형성 (0) | 2023.04.04 |
제어자 (0) | 2023.04.04 |
메서드 오버라이딩(Overriding) (0) | 2023.04.04 |
메서드 오버로딩 (Overloading) (0) | 2023.04.03 |