클래스와 객체의 정의와 용도
클래스
정의 : 객체를 정의해놓은 것. 또는 객체의 설계도 또는 틀.
용도 : 객체를 생성하는데 사용된다.
객체
정의 : 실제로 존재하는 것. 사물 또는 개념
용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
객체와 인스턴스
클래스로부터 객체를 만드는 과정 → 클래스의 인스턴스화
만들어진 객체 → 그 클래스의 인스턴스
객체
모든 인스턴스를 대표하는 포괄적인 의미
ex) 책상은 객체다.
인스턴스
어떤 클래스로부터 만들어진 것인지를 강조하는 구체적인 의미
ex) 책상은 책상클래스의 인스턴스다.
객체의 구성요소 - 속성과 기능
객체는 속성과 기능
으로 이루어져 있다.
속성과 기능을 객체의 맴버(구성원)
라 한다.
속성은 맴버변수
로 기능은 메서드
로 정의한다.
인스턴스의 생성과 사용
클래스를 선언한 것은 설계도를 작성한 것에 불과하고 인스턴스를 생성해야 객체를 사용 가능할 수 있다.
1
2
3
4
5
6
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성 후 객체의 주소를 참조변수에 저장
ex)
TV t;
t = new TV();
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
객체 배열
객체를 배열로 다루는 것
1
TV tv1, tv2, tv3; -> TV[] tvArr = new TV[3];
객체 저장
위에는 그저 객체를 다루기 위한 참조변수들이 만들어진 것이고 각 요소에 저장해야한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TV[] tvArr = new TV[3]; // 참조변수 배열을 생성
// 객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new TV();
tvArr[1] = new TV();
tvArr[2] = new TV();
// 한줄로 작성
Tv[] tvArr = {new Tv(), new Tv(), new Tv()};
// 객체의 수가 많으면 for문 사용
Tv[] tvArr = new Tv[100];
for(int i = 0; i < tvArr.length; i++) {
tvArr[i] = new Tv();
}
클래스의 또 다른 정의
클래스는 “객체를 생성하기 위한 틀”이며 “속성과 기능으로 정의되어있다.”고 했다. 이것은 객체지향이론의 관점에서 내린 정의이고, 프로그래밍적인 관점에서 클래스의 정의와 의미는 “데이터와 함수의 결합”이다.
- 변수 - 하나의 데이터 저장
- 배열 - 같은 종류의 여러 데이터를 하나의 집합으로 저장
- 구조체 - 종류에 관계없이 하나의 집합으로 저장
- 클래스 - 데이터와 함수의 결합(구조체 + 함수)
사용자 정의 타입
프로그래머가 서로 관련된 변수들을 묶어 하나의 타입으로 추가하는 것
객체지향언어에서는 클래스가 곧 사용자 정의 타입이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 비객체지향적 코드
int hour1, hour2, hour3;
int minute1, minute2, minute3;
float second1, second2, second3;
// 객체지향적 코드
// 1. 클래스
class Time {
int hour;
int minute;
float second;
}
// 2. 객체배열
int[] hour = new int[3];
int[] minute = new int[3];
float[] second = new float[3];
객체지향언어에서는 제어자와 메서드를 이용하여 조건들을 코드에 쉽게 반영할 수 있다.
출처
자바의 정석