https://www.youtube.com/channel/UC1IsspG2U_SYK8tZoRsyvfg
유튜브 남궁성의 정석코드 채널
'자바의 정석 - 기초편'을 보고 메모한 것임을 알려드립니다.
*클래스의 정의
클래스? => 1.설계도 2.데이터+함수 3.사용자 정의 타입
*첫 번째인 설계도의 개념을 알아보았고, 두 번째인 '클래스 == 데이터 + 함수'의 개념을 알아보자.
먼저 데이터의 발전 과정을 4가지로 나누어 살펴보자.
1.변수 => 하나의 데이터를 저장할 수 있는 공간
2.배열 => 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3.구조체 => 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간
4.클래스 => 데이터와 함수의 결합(구조체 + 함수)
서로 관련된 여러 데이터들을 묶은것이 3번째 과정인 구조체인데
그렇다면 왜 여러 데이터들을 묶었을까?
바로, 서로 관계(관련)가 있기 때문이다.
그럼 서로 관계 있는 것들을 왜 묶어서 관리할까? 편리하기 때문이다.
그리고 더 발전한 4번째 과정이 바로 클래스다.
구조체까지만 해도 서로 관계있는 변수들끼리만 묶었지만,
클래스에서는 변수(데이터)들을 함수와 함께 묶은 것이 클래스다.
왜 함께 묶었을까?
서로 관련있는 변수(데이터)끼리만 묶을 것이 아니라, 함수들도 서로 관련이 있다면 묶자는 것이다.
*이번에는 세 번째인 '사용자 정의 타입'을 알아보자.
사용자 정의 타입 => 원하는 타입을 직접 만들 수 있다.
타입이란? 바로 클래스다.
시간을 다루고 싶어서 타입을 찾아보았지만 없어서 새로 만든다고 가정을 해보자.
그렇다면 위 사진과 같이 내가 원하는 시간을 다루는 타입을 만들 수 있다.
변경전 변경후
int hour;
int minute; => Time t = new Time();
int second;
--------------------------------------------------------------------------
int hour1, hour2, hour3; Time t1 = new Time();
int minute1, minute2, minute3; => Time t2 = new Time();
int second1, second2, second3; Time t3 = new Time();
--------------------------------------------------------------------------
int[] hour = new int[3]; Time[] t = new Time[3];
int[] minute = new int[3]; => t[0] = new Time();
int[] second = new int[3]; t[1] = new Time();
t[2] = new Time();
--------------------------------------------------------------------------
만약 12시 34분 56초를 저장하고 싶다면
(1)
int hour = 12;
int minute = 34;
int second = 56;
또는
(2)
class Time {
int hour;
int minute;
int second;
}
Time t = new Time();
t.hour = 12;
t.minute = 34;
t.second = 56;
처럼 할 수 있을 것이다.
(1)코드와 (2)코드에는 어떤 차이가 있을까?
(1)코드는 비객체지향적인 코드이며
(2)코드는 객체지향적인 코드이다.
(1), (2) 두 코드는 하는 일에 있어서는 별 차이가 없지만
자바와 같은 객체지향언어에서는 (2)코드처럼 작성하는 것이 더 바람직하다.
왜냐하면, 서로 관련된 값들을 강하게 묶을 수 있다는 장점도 있고
코드가 덜 복잡해지고 유지보수가 편리해지기 때문이다.
자료 출처 : 자바의 정석 요약집
(https://github.com/castello/javajungsuk_basic/blob/master/javajungsuk_basic_%EC%9A%94%EC%95%BD%EC%A7%91.pdf)