1. 학습목표
객체지향 프로그래밍에 대해 이해할 수 있다.
클래스,객체,인스턴스의 개념을 이해할 수 있다.
2.필요 개념 문장정리
- 객체지향이론의 기본 개념은 '실제 세계는 객체로 이루어져 있으며 발생하는 모든 사건들은 사물간의 상호작용이다'라는 것이다.
- 객체지향언어의 가장 큰 장점은 코드의 재사용성이 높고 유지보수가 용이하다는 것이다.
클래스와 객체와 인스턴스
- 클래스란 객체를 정의해 놓은 것, 객체의 설계도라고 할 수 있다.
- 클래스는 단지 객체를 생성하는데 사용될 뿐 객체 그 자체는 아니다.
- 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
- 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 갖고 있다.
- 객체는 속성과 기능 두 종류의 구성요소로 이루어져 있으며 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 객체가 가지고 있는 속성과 기능을 그 객체의 멤버라 한다.
- 속성은 여러 용어중 멤버변수로 기능은 메서드로 주로 사용된다.
- 일반적으로 메서드보다는 멤버변수를 먼저 선언하고 멤버변수는 멤버변수끼리 메서드는 메서드끼리 모아 놓는 것이 일반적이다.
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
3. 코드작성
class Tv {
// Tv의속성(멤버변수)
String color; // 색상
boolean power; // 전원상태(on/off)
int channel; // 채널
// Tv의기능(메서드)
void power() { power = !power; } // TV를 켜거나 끄는 기능을 하는 메서드
void chanelUp() { ++channel; } // TV의 채널을 높이는 기능을 하는 메서드
void channelDown() { --channel; } // TV의채널을 낮추는 기능을 하는 메서드
}
class TvTest {
public static void main(String args[]) {
Tv t; // Tv인스턴스를 참조하기 위한 변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한다.
t.channel = 7; // Tv인스턴스의 멤버변수 channe1의 값을 7로한다.
t.channelDown(); // Tv인스턴스의 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
class TvTest1 {
public static void main(String args[]) {
Tv t1 = new Tv();
Tv t2 = new Tv();
System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
t2 = t1; // t1이 저장하고 있는 값(주소)을 t2에 저장한다.
t1.channel = 7; //channel 값을 7로 한다.
System.out.println("t1의 channel값을 7로 변경하였습니다.");
System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
실행결과
t1의 channel값은 0입니다.
t2의 channel값은 0입니다.
t1의 channel값을 7로 변경하였습니다.
t1의 channel값은 7입니다.
t2의 channel값은 7입니다.
- Tv t; 메모리에 참조변수 t를 위한 공간이 마련된다. 아직 인스턴스가 생성되지 않았으므로 참조변수로 아무것도 할 수 없다.
- t = new Tv(); 멤버변수는 각 자료형에 해당하는 기본값으로 초기화 된다.
- 인스턴스를 다루기 위해서는 참조변수가 반드시 필요하다.
- 인스턴스의 멤버션수를 사용하려면 참조변수.멤버변수와 같이 하면 된다.
- 참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown메서드를 호출한다.
- 인스턴스는 참조변수를 통해서만 다룰 수 있으며 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
- 참조변수에는 하나의 값(주소)만이 저장될 수 있으므로 둘이상의 참조변수가 하나의 인스턴스를 참조하는 것은 가능하지만 하나의 참조변수로 여러 개의 인스턴스를 가리키는것은 가능하지 않다.
4. 마무리
클래스와 인스턴스와 객체에 대해 구분할 수 있었다.
참조라는 개념이 메모리 할당과 같은 개념인지 값과 주소에 대한 개념을 좀더 공부해야할 것 같다.
'언어 기초 > JAVA' 카테고리의 다른 글
[자바의정석 | Chapter 06 객체지향 프로그래밍1] 클래스변수와 인스턴스변수 (1) | 2024.01.16 |
---|---|
[자바의정석 | Chapter 06 객체지향 프로그래밍1] 객체배열, 프로그래밍에서의 클래스 (0) | 2024.01.15 |
[자바의정석 | Chapter 05 배열] 다차원배열 예제 18~23 (0) | 2024.01.11 |
[자바의정석 | Chapter 05 배열] String배열 예제12~15 (0) | 2024.01.11 |
[자바의정석 | Chapter 05 배열] 배열 예제5 ~ 11 (2) | 2024.01.10 |