[Java의 정석]Chapter6.객체지향 프로그래밍(09~10)
Chapter 6. 객체지향 프로그래밍
09. 클래스의 정의(1) - 데이터와 함수의 결합
-
프로그래밍언어에서 데이터 처리를 위한 데이터 저장형태의 발전과정
- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
- 구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
- 클래스 : 데이터와 함수의 결합(구조체+함수)
-
함수는 주로 데이터를 가지고 작업을 하기 때문에 많은 경우에 있어 데이터와 함수는 관계가 깊음
-
자바와 같은 객체지향언어에서는 변수(데이터)와 함께 함수를 하나의 클래스에 정의하여 서로 관계가 깊은 변수와 함수들을 함께 다룰 수 있게 함
-
서로 관련된 변수들을 정의하고 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것이 클래스
-
C언어에서는 문자열을 문자의 배열로 다루지만, 자바에서는 String이라는 클래스로 문자열을 다룸
▶문자열을 단순히 문자의 배열로 정의하지 않고 클래스로 정의한 이유는 문자열과 문자열을 다루는데 필요한 함수들을 함께 묶기 위함
public final class String implements java.io.Serializable, Comparable {
private char[] value; //문자열을 저장하기 위한 공간
public String replace(char oldChar, char newChar) {
...
char[] val = value; //같은 클래스 내의 변수를 사용해서 작업
...
}
...
10. 클래스의 정의(2) - 사용자 정의 타입
사용자정의 타입(user-defined type)
: 프로그래밍언어에서 제공하는 기본 자료형(primitive type)외에 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것- 자바와 같은 객체지향언어에서는 클래스가 곧 사용자 정의 타입임
- 기본형의 개수는 8개로 정해져 있지만, 참조형의 개수가 정해져 있지 않은 이유는 프로그래머가 새로운 타입을 추가할 수 있기 때문
▶ 시간을 표현하기 위해 3개의 변수를 선언
int hour; //시간을 표현하기 위한 변수
int minute; //분을 표현하기 위한 변수
float second; //초를 표현하기 위한 변수, 1/100초 까지 표현하기 위해 float사용
▶만일 3개의 시간을 다뤄야 한다면 아래와 같음
int hour1, hour2, hour3;
int minute1, minute2, minute2;
float second1, second2, second3;
▶다뤄야 하는 시간의 개수가 늘어날 때마다 시,분,초를 위한 변수도 추가해줘야 하는데
데이터의 개수가 많으면 배열로 처리
int[] hour = new int[3];
int[] minute = new int[3];
float[] second = new float[3];
→ 시간 데이터의 개수가 늘어나더라도 배열의 크기만 변경해주면 되므로,
변수를 매번 새로 선언해야하는 불편함은 사라짐
▶하나의 시간을 구성하는 시, 분 ,초가 서로 분리되어 있기 때문에 프로그램 수행과정에서
시,분,초가 따로 뒤섞여 올바르지 않은 데이터가 될 가능성이 있기때문에
시, 분, 초를 하나로 묶는 사용자정의 타입, 즉 클래스를 정의하여 사용
class Time {
int hour;
int minute;
float second;
}
🍉 비객체지향적 코드와 객체지향적 코드
<비객체지향적 코드>
int hour1, hour1, hour3;
int minute1, minute2, minute3;
float second1, second2, second3;
int[] hour = new int[3];
int[] minute = new int[3];
float[] second = new float[3];
<객체지향적 코드>
Time t1 = new Time();
Time t2 = new Time();
time t3 = new Time();
Time[] t = new Time[3];
t[0] = new Time();
t[1] = new Time();
t[2] = new Time();
- 시,분,초가 하나의 단위로 묶여서 다루어지면 다른 시간데이터와 섞이는 일은 없겠지만, 시간 데이터에는 추가적인 제약조건이 있음
- 시,분,초는 모두 0보다 크거나 같아야 함
- 시의 범위는 0~23, 분과 초의 범위는 0~59 임
- 객체지향언어에서는
제어자
와메서드
를 이용해서 조건들을 코드게 쉽게 반영 가능
<조건반영하여 Time클래스 작성>
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; //지정된 값(h)이 유효한 경우에만 hour를 변경
}
...
}
- 제어자를 이용해서 변수의 값을 직접 변경하지 못하게 하고, 대신 메서드를 통해서 값을 변경하도록 작성
- 값을 변경할 떄 지정된 값의 유효성을 조건문으로 점검한 다음에 유효한 값일 경우에만 변경
Author And Source
이 문제에 관하여([Java의 정석]Chapter6.객체지향 프로그래밍(09~10)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wendy1126/Java의-정석Chapter6.객체지향-프로그래밍0910저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)