반응형

이전에 공부하며, 클래스는 설계도의 관점으로 이해했다. 
하지만 클래스는 여러 관점으로 볼 수 있다.

  • 설계도
  • 데이터 + 함수
  • 사용자 정의 타입

이렇게 다른 관점으로 보면, 설계도 이외에도 데이터 + 함수, 혹은 사용자 정의 타입 이라고 할 수 있다.
설계도에 대한 것은 앞서 공부했고,

이번에는 두번째 관점인 클래스는 데이터와 함수의 결합이다. 라는 관점을 알아보도록 하겠다.

 


 

클래스의 정의(1)

클래스  == 데이터 + 함수

데이터 저장공간의 발전 과정을 보면, 

1. 변수 - 하나의 데이터를 저장할 수 있는 공간
2. 배열 - 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체 - 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간
4. 클래스 - 데이터와 함수의 결합(구조체 + 함수)

배열은 같은타입만 하나로 묶을 수 있고, 구조체는 다른타입도 하나로 묶을 수 있다.
왜냐하면 서로 관계있는 것들을 하나로 묶어서 다루면 편리한 경우가 많기 때문이다.

구조체가 발전한 것이 클래스다.
구조체까지만해도, 서로 관계있는 변수들 끼리만 묶었는데, 
클래스에서는 변수들을 함수와 함께 묶는다. 왜 함수와 함께 묶었을까?
서로 관련있는 데이터뿐만아니라, 함수(메서드)도 관련이 있다면 묶어서 사용하면 편리하다.
함수가 어떤 작업이나 계산을 하는데, 데이터를 이용해서 작업이나 계산을 하기 때문에 데이터와 함수(메서드)를 묶었다. 
이것이 클래스다.

 


 

클래스의 정의(2)

사용자 정의 타입 - 원하는 타입을 직접 만들 수 있다.

 

사용자 정의 타입이라는건, 우리가 정의한 타입이라는 거다.
자바에서는 우리가 원하면 우리가 원하는 타입을 직접 만들 수 있다.
그 타입이 바로 클래스다.

시간을 다루고 싶어서 타입을 찾아보았는데,  자바에는 시간을 다루기 위한 타입이 없다. (자바에서 제공하는 시간을 다루는 클래스가 있긴하지만, 지금은 기본 타입인 8개의 타입만 있다고 가정하자.)
우리가 시간을 저장하기 위한 타입이 없어서 새로만드는 걸로 가정을 해보자.

int hour;
int minute;
int second;

시간, 분, 초 3가지 값을 저장하기 위해서 integer타입의 변수 3개를 선언했다.
근데, 여러 시간을 다루기 위해서는 어떻게 해야할까?

예를 들어 3개의 시간을 다뤄야 한다고 생각해보자.

int hour1, hour2, hour3;
int minute1, minute2, minute3;
int second1, second2, second3;

3개의 시간을 다루기 위해서 시간, 분, 초 변수를 각각 3개씩 총 9개를 선언했다고 해보자.
1개의 시간을 다룰 때보다 훨씬 복잡해졌다.

근데 더 많은 시간을 다루는 경우도 있을 것이다.
그럴때는 어떻게 하면 될까?

int[] hour = new int[3];
int[] minute = new int[3];
int[] second = new int[3];

이렇게 배열을 이용할 수 있을 것이다.
그런데, 배열을 이용하는 것 까지는 좋은데, 원래는 시분초가 하나의 시간인데,
배열은, 시간은 시간끼리, 분은분끼리, 초는 초끼리 묶여있다는 것이 문제다.

그래서 이 문제를 해결하기 위해서 변수 hour, minute, second를 묶어서 Time이라는 클래스를 정의했다.

class Time{
	int hour;
    int minute;
    int second;
}

이렇게 3개의 변수를 하나로 묶고나면, 

3개의 변수를 선언하는 대신, 하나의 객체를 생성하는 것으로 대신 할 수 있다.

그리고 3개의 시간을 다루기 위한 것이므로 3개의 객체를 생성해주면 왼쪽 코드와 오른쪽 코드가 같은 것이 될 것이다.

그리고 시간은 시간끼리, 분은 분끼리, 초는 초끼리 모아놓은 배열을 객체배열로 시분초로 저장할 수 있어서 문제를 해결 할 수 있다.

결과적으로,
hour, minute, second변수를 묶지 않았을 때 보다, Time클래스로 묶은것이 훨씬 코드가 간결해지고, 시분초가 하나로 묶이기 때문에 처음 배열처럼 시분초가 따로 묶이는 문제가 없어졌다.

 

이번에는 그림을 통해서 코드를 비교해보도록 하겠다.

양쪽 그림을 보면, 참조변수는 차이가 있지만, 저장공간이 3개라는 점은 동일하다.
그래도 왼쪽코드보다는 오른쪽 코드가 좀더 객체지향적인 코드다.

만약에 12시 34분 56초의 코드를 저장할 때의 예시이다.

왼쪽코드는 비 객체지향적인 코드이고,
오른쪽 코드는 객체지향적인 코드이다.

이 두코드가 하는일에 있어서는 별 차이가 없지만, 자바와 같은 객체지향 언어에서는 오른쪽 코드처럼 작성하는 것이 더 바람직하다.

서로 관련되있는 값들을 강하게 묶을 수 있다는 장점도 있고, 코드가 덜 복잡해지고, 유지보수하기 편해진다는 그러한 장점이 있다.

반응형

'JAVA' 카테고리의 다른 글

클래스 변수와 인스턴스 변수  (0) 2022.03.25
선언위치 변수 종류  (0) 2022.03.25
객체 배열  (0) 2022.03.24
객체의 생성과 사용  (0) 2022.03.24
하나의 파일에 여러 클래스 작성하기  (0) 2022.03.24