클래스의 정의: 데이터 + 함수
클래스의 간단한 정의는, 보는 관점에 따라 3가지로 설명할 수 있다.
- 설계도
- 데이터 + 함수
- 사용자 정의 타입
앞서서 클래스는 설계도라고 했다. 그러나 그 외에도 다른 관점에서 보면, 클래스를 데이터와 함수의 결합이라고 볼 수도 있다.
(혹은 사용자 정의 타입이라고도 할 수 있다.)
아래는 데이터와 저장 공간의 발전 단계이다.
배열은 같은 타입의 변수밖에 저장할 수 없다는 한계가 있다.
이를 보완하여 서로 관계가 있는 다른 타입의 변수도 함께 저장할 수 있는 구조체가 생겼다.
이 구조체에서 더 발전한 것이 클래스이다.
구조체까지는 변수만 담을 수 있었지만, 클래스에는 변수와 함수를 함께 저장할 수 있다.
'관련있는 다양한 데이터를 담는 것을 넘어서 이 데이터를 가지고 작업할 때 필요한 함수를 함께 묶어놓자!'는 것이다.
클래스의 정의: 사용자 정의 타입
사용자 정의 타입은 말 그대로 우리가 정의한 타입을 말한다.
자바에서는 우리가 원한다면, 우리가 원하는 타입을 직접 만들 수 있다.
만약 단순 정수, 실수가 아닌 '시간' 이라는 대상을 표현하고 저장할 필요가 있다고 하자.
// 시, 분, 초를 저장하는 int 타입 변수 선언
int hour;
int minute;
int second;
이처럼 시, 분, 초를 저장하는 int 타입 변수를 선언하는 것도 괜찮겠지?
근데 만약 저장해야 하는 시간이 3개라면 어떻게 해야할까?
int hour1, hour2, hour3;
int minute1, minute2, minute3;
int second1, second2, second3;
방식을 그대로 유지한다면, 이렇게 3개를 만들어야할 것이다.
그러나 만약 3개 이상의 n개라면?
int[] hour = new int[n];
int[] minute = new int[n];
int[] second = new int[n];
이번에는 조금 더 머리를 써서 배열을 만들었다.
근데 ‘시간’ 이라고 하면 시, 분, 초가 한 세트인데 이건 다 따로따로 저장되어 있잖아?
뭔가 활용성 측면에서 적합하지가 않은 느낌이다.
만약, 시간 저장만을 목적으로 하는 타입의 객체가 있다면 어떨까?
우리는 이를 직접 정의해볼 수 있다.
(사실 자바에는 시간을 제공하는 클래스가 있음.. 그러나 일단 패스)
class Time {
int hour;
int minute;
int second;
}
3개의 변수를 묶어서 Time이라는 클래스를 정의했다.
그럼 위에서처럼 시, 분, 초를 각각 선언하지 않고, 아래와 같이 하나의 객체로 대신할 수 있다.
Time t = new Time();
Time 클래스를 정의해줌으로써, 코드가 가운데 블록 -> 오른쪽 블록들로 바뀐다. 보다 간결하고 명확해졌다.
구조적 차이를 보자.
참조변수가 각각 3개냐 1개냐의 차이는 있지만 결국 저장공간은 동일하다.
다만 하나의 참조변수로 컨트롤할 수 있고, 목적에 따라 잘 묶여있어 더 객체지향적이라고 할 수 있다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[자바의 정석 스터디] Ch3. 연산자/ Ch4. 조건문과 반복문 (0) | 2024.03.25 |
---|---|
[자바의 정석 스터디] Ch.2 변수 (0) | 2024.03.08 |
[자바의 정석] (Ch.6 객체지향개념) 클래스 변수, 인스턴스 변수 (0) | 2023.09.28 |
[자바의 정석] (Ch6. 객체지향개념) 선언 위치에 따른 변수의 종류 (0) | 2023.09.26 |
[자바의 정석] (Ch6. 객체지향개념) 클래스와 객체 (0) | 2023.09.26 |