자바의 정석 - 객체지향2

<space>·2021년 3월 7일
0

Java

목록 보기
4/6

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)

profile
갓 프로그래밍에 입문

0개의 댓글