본문 바로가기
back-end/JAVA

6)객체지향-클래스의 정의

by 모두의 향연 2021. 5. 11.
728x90
반응형

6) 객체지향-클래스의 정의

 

클래스는 크게 세 가지로 정의할 수 있습니다.

첫 번째는 계속 써왔던 '설계도'로 정의할 수 있고요.

두 번째는 '데이터+함수'로 정의할 수 있습니다.

세 번재는 '사용자 정의 타입'으로 정의합니다.

 

오늘은 두 번째, 세 번째 정의를 배워보도록 하겠습니다.

어려울 것 없고요. 클래스는 당연히 데이터(변수)+와 함수(메서드)로 이루어지잖아요? 그게 다 입니다.

 

6-1) 클래스 == 데이터 + 함수

클래스==데이터+함수

-변수: 하나의 데이터를 저장할 수 있는 공간

-배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간

-구조체: 다른 종류의 여러 데이터(종류 관계 x)를 하나로 저장할 수 있는 공간

-클래스: 데이터와 함수의 결합(구조체+함수)

 

근데 클래스에선 왜 구조체와 함수를 같이 묶었을까요?

서로 관련이 있기 때문입니다.

 

함수는 메서드입니다. 메서드는 무슨 일을 해요?

기능적인 일을 해요. 작업이나 계산과 같은 기능이요.

작업이나 계산은 데이터가 있어야 하잖아요. 그래서 데이터와 함께 묶습니다.

 

 

 

다음으로 세 번째 정의인 사용자 정의 타입을 보겠습니다.

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

자바에서는 우리가 원하면 그 타입을 만들 수 있는데요, 그 타입이 바로 클래스입니다.

전자시계의 시분초

시계를 하나 만들어보겠습니다.

'시간을 다루는 타입'을 쓰고 싶은데 자바에서는 없습니다(실제로는 있지만 없다고 가정합시다).

'기본형타입' 8개(boolean, char, byte, short, int, long, float, double)밖에 없죠.

시간이라는 변수를 다루기 위해 일단 기본형 int타입을 변수마다 각각 썼습니다.

int hour;
int minute;
int second;

 

근데 시계가 3개 있는 겁니다. 그래서 시, 분, 초도 3개 만들어야 하는 상황이 벌어집니다.

3개의 시계

그래서 9개의 변수를 선언합니다.

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

 

 

그런데 100개의 시계를 만들어야 하는 상황이 벌어진다면..?

많은 시계들

그래서 배열을 만듭니다.

일단 시계 3개로 배열을 만들어봅시다.

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

 

이렇게 하면 좋겠지만, 원래 우리가 해야 할 것은 시, 분, 초를 묶어서 하나의 시계를 만드는 거잖아요.

근데 배열로 묶어버리면 시간은 시간끼리 분은 분끼리 초는 초끼리 묶이게 됩니다.

그래서 이 문제를 해결하기 위해서 Time이라는 클래스를 만들게 됩니다.

이게 바로 사용자 정의 타입입니다.

사용자 정의타입

TIme이라는 클래스를 만드세요. 즉 시계 설계도를 하나 만들어놓습니다.

그리고 시계를 만들 때마다 그 설계도를 보고 하나씩 만들어 봅니다.

그럼 이전처럼 시, 분, 초가 끼리끼리 묶지 않고 시분초끼리 하나로 묶이게 되면서 쓰기 편리해졌습니다.

 

 

만약, 12시 20분 37초인 시계를 만들게 되면

'비객체지향'인 위에 식은 변수를 선언했을 시, 각각의 변수가 따로 선언되었고

'객체지향'인 아래 식은 객체를 생성 시, Time타입의 클래스에서 변수를 가져와 하나의 묶음으로 선언되었습니다.

 

위아래 두 개의 식은 동일합니다. 

다만, 밑에 있는 식이 객체지향 코드로 쓰기 편리합니다.

서로 관련된 값들을 묶을 수도 있고, 코드도 간결해지며, 유지보수에도 편리하기 때문입니다.

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 되고요! 저는 개인적으로 공부하는 게 목적입니다*

728x90
반응형