20210115 클래스= 변수 + 메소드(함수)

NOAH·2021년 1월 15일
0

TIL

목록 보기
6/179
post-thumbnail

소감
자바의 정석 설명이 너무 명쾌해서 시간가는 줄 모르고 읽었다. 클래스와 객체는 중요하다고 생각해서, 모방은 창조의 어머니 :) K의 저자직강을 듣고 주말동안 카피 캣이 되어 하나씩 공부하기 로 했다.

K code

Mission

학습 목표
1) 클래스 class, 객체 object, 인스턴스 instance
2) Java에 익숙해지기

Class : 데이터와 함수의 결합

클래스는 '객체를 생성하기 위한 틀'이며 클래스는 속성과 기능으로 정의 되어있다' 이는 객체이향이론의 관점에서 내린 정의이고, 프로그래밍적인 관점에서는 살펴보자.

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

하나의 데이터를 저장하기 위해 변수를, 그리고 같은 종류의 데이터를 보타 효율적으로 다루기 위해서 배열이라는 개념을 도입했으며, 후에는 구조체(structure)가 등장하여 자료의 종류에 상관 없이 서로 관계과 깊은 변수들을 하나로 묶어서 다룰 수 있도록 했다.

그동안 데이터와 함수가 서로 관계가 없는 것 처럼 데이터는 데이터끼리, 함수는 함수끼리 따로 다루어져 왔지만, 사실 함수는 주로 데이터를 가지고 작을 하기 때문에 많은 경우에 있어서 데이터와 함수는 관계가 깊다.

그래서 자바와 같은 객체지향언어에서는 변수(데이터)와 함수를 하나의 클래스에 정의하여 서로 관계가 깊은 변수와 함수들을 함꼐 다룰 수 있게 했따.

서로 과련되 변수를 정의하고 이들에 대한 작업을 수행하는 함수들을 함께 정의하는 것이 바로 클래스이다.

class : 사용자 정의 타입

시간을 표현하기 위해서 변수를 선언해보자.

int hour;
int minute;
float second ;

시간들 표현 하기 위해서 3개의 시/분/초 변수를 선언 하였다. 만일 3개의 시간을 다뤄야 한다면 다음과 같은 변수를 또 선어해야 할 것이다.

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

이처럼 다뤄야 하는 시간의 개수가 늘어날 때마다 시,분,초를 위한 변수를 추가하기에는 너무 복잡하다. 이를 해결 하기 위해 배열로 처리해보자.

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

배열로 처리하면 아무리 다뤄야 하는 데이터의 개수가 늘어나더라도 배열의 크기만 변경해주면 되므로, 변수를 매번 새로 선언해주지 않아도 된다. 그러나
하나의 시간을 구성하는 시,분,초가 서로 분리되어 있기 때문에 좋은 데이터 타입은 아니다.

드디어 클래스를 한번 사용해보자.

class Time{

	int hour;
	int minute;
    	float second;
        
}

시, 분, 초 가 하나의 클래스 안에 묶여 있어서 다른 시간 데이터와 섞일 일이 없을 것이다. 그러나 시간 데이터에는 추가 적인 제약조건이 있다.

  1. 시, 분, 초 >= 0
  2. 시 < 24, 분 과 초 < 59

이러한 추가조건들을 반영하는 것은 객체지향언어가 아닌 언어에서는 반영하기가 어렵다.

그러나 매써드를 이용해서 이러한 조건들을 코드에 쉽게 반영할 수 있따. 제어자에 대해서 배우지는 않았지만, 위의 조건들을 반영하여 Time class를 만들어보자.


public class Time{
 
 	private int hour;
 	private int minute; 
 	private float second;
    
 //hour의 값을 변경하기 위한 매서드 지정한 값이 0보다 작거나 23보다
 //크면(유효한 값이 아니면) 값을 변경하지 않고 매서드를 종료(return)
	public void setHour(int h){
    	if(h < 0 || h > 23) return;
        hour = h ;
    }...
}

4개의 댓글

comment-user-thumbnail
2021년 1월 15일

책 내용을 정리 잘 해주셨네요~! 한주동안 고생 많으셨습니다~!

1개의 답글
comment-user-thumbnail
2021년 1월 15일

노아~ 덕분에 너무 즐거운 한 주 보냈어요😊 자바의 정석(+k, honux)의 매력에 푹 빠졌던 노아 표정이 아직도 생각나네요ㅋㅋㅋㅋ

1개의 답글