자바의 꽃 객체지향부터 공부하려고 한다. 책은 역시 자바의 정석으로 공부했고 정말 자세하게 나와있다...
I Chapter06 객체지향 프로그래밍
클래스와 객체
- 클래스와 객체의 정의와 용도
클래스의 정의 클래스란 객체를 정의해 놓은 것이다. 클래스의 용도 클래스는 객체를 생성하는데 사용된다. |
객체의 정의 실제로 존재하는 것. 사물 또는 개념 객체의 용도 객체가 가지고 있는 기능과 속성에 따라 다름 유형의 객체 책상, 의자, 자동차, TV와 같은 사물 무형의 객체 수학공식, 프로그램 에러와 같은 논리나 개념 |
클래스와 객체의 예
클래스 | 객체 |
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
- 객체의 구성요소 – 속성과 기능
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
속성 매개변수, 특성, 필드, 상태 기능 메서드, 함수, 행위 |
TV로 예를 들면
속성 | 크기, 길이, 높이, 색상, 볼륨, 채널 등 |
기능 | 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등 |
- 실습
class Tv {
// TV의 속성(멤버변수)
String color; // 색상
boolean power; // 전원상태
int channel; // 채널
// TV의 기능(메서드)
// TV 끄기 켜기
// power의 관게 없이 항상 반대의 값으로 변경해주면 되므로 굳이 if문을 사용할 필요가 없다.
void power() {
power = !power;
}
// TV 채널 높이기 낮추기
void channelUp() {
channel++;
}
void channelDown() {
channel--;
}
}
class TvTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Tv 인스턴스를 참조하기 위해 변수 t를 선언
Tv tv = new Tv();
tv.channel = 7;
tv.channelDown();
System.out.println("현재채널은" + tv.channel + "입니다.");
}
}
- 실습 결과
현재채널은6입니다.
자세히 보기
1. Tv tv;
Tv 클래스 타입의 참조변수 t를 선언한다. 메모리에 참조변수 t를 위한 공간이 마련된다. 아직 인스턴스가 생성되지 않았으므로 참조변수로 아무것도 할 수 없다.
2. tv= new Tv()
연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 주소가 0x100인 곳에 생성되었다고 가정하자. 이 때, 멤버변수는 각 자료형에 해당하는 기본값으로 초기화 된다.
Color는 참조변수이므로 null, power는 boolean이므로 false로, 그리고 channel은 int이므로 0으로 초기화 된다.
그 다음에는 대입연산자(=)에 의해서 생성된 객체의 주소값이 참조변수 tv에 저장된다. 이제는 참조변수 tv를 통해 Tv인스턴스에 접근할 수 있다. 인스턴스를 다루기 위해서는 참조변수가 반드시 필요하다.
3. tv.channel = 7;
참조변수 tv에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장한다. 여기서 알 수 있는 것처럼, 인스턴스의 멤버변수(속성)를 사용하려면 ‘참조변수.멤버변수’와 같이 하면 된다.
4. tv.channelDown();
참조변수 tv가 참조하고 있는 Tv인스턴스의 channelDown메서드를 호출한다. Channel Down메서드는 멤버변수 channel에 저장되어 있는 값을 1감소시킨다.
void channelDown(){--channel;}
channelDown()에 의해서 channel 값은 7에서 6이 된다.
5. System.out.println(“현재 채널은”+tv.channel+”입니다.”);
참조변수 tv가 참조하고 있는 Tv 인스턴스의 멤버변수 channel에 저장되어 있는 값을 출력한다. 현재 channel의 값은 6이므로 ‘현재 채널은 6입니다.’가 화면에 출력된다.
인스턴스와 참조변수의 관계는 마치 우리가 일상생활에서 사용하는 TV와 TV리모콘의 관계와 같다. TV리모콘(참조변수)을 사용하여 TV(인스턴스)를 다루기 때문이다. 다른 점이라면, 인스턴스는 오직 참조변수를 통해서만 다룰 수 있다는 것이다.
그리고 TV를 사용하려면 TV 리모콘을 사용해야하고, 에어컨을 사용하려면, 에어컨 리모콘을 사용해야하는 것처럼 Tv인스턴스를 사용하려면, Tv클래스 타입의 참조변수가 필요한 것이다.
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
객체배열
많은 수의 객체를 다뤄야할 때, 배열로 다루면 편리할 것이다. 객체 역시 배열로 다루는 것이 가능하며, 이를 ‘객체 배열’이라고 한다. 그렇다고 객체 배열 안에 객체가 저장되는 것이 아니고, 객체의 주소가 저장된다. 사실 객체 배열은 참조변수들을 하나로 묶은 참조변수 배열인 것이다.
'JAVA' 카테고리의 다른 글
합이 6이 되는 경우의 수 출력 (0) | 2019.05.08 |
---|---|
합이 6이 되는 경우의 수 출력 (0) | 2019.05.03 |
[JAVA] Caesar cipher Coding 하기 (0) | 2019.04.12 |
20190401 (0) | 2019.04.01 |
190329 (0) | 2019.03.28 |
댓글