Java의 정석 #5 - 객체지향 프로그래밍(객체의 생성과 사용)

김형우·2022년 7월 13일
0

Java의 정석

목록 보기
5/7
  • 이전에 만든 Tv 클래스
class Tv { 
	// Tv의 속성(멤버변수)
	String color;           // 색상 
	boolean power;         	// 전원상태(on/off) 
	int channel;           	// 채널 

	// Tv의 기능(메서드) 
	void power()   { power = !power; }  // TV를 켜거나 끄는 기능을 하는 메서드  
	void channelUp()   { channel++; }  	// TV의 채널을 높이는 기능을 하는 메서드
	void channelDown() { channel--; }   // TV의 채널을 낮추는 기능을 하는 메서드
}

ch6-6. 객체의 생성과 사용

  • 이전에 배운 클래스(설계도) 작성방법 → 설계도를 이용한 객체의 생성, 사용
  • ① 클래스 작성
    ② 객체 생성(Tv t = new Tv();)
    ③ 객체 사용(t.channel = 7;)

1. 객체의 생성

  • ex) 참조변수선언(t) → 객체생성(new Tv();) → (대입연산자('=')로)연결
클래스명 변수명;			// 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명();	// 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장

Tv t;					// Tv클래스 타입의 참조변수 t를 선언
t = new Tv();			// Tv인스턴스를 생성 후, 생성된 Tv인스턴스의 주소를 t에 저장

Tv t = new Tv();		// 같음

2. 객체의 사용

  • '객체가 가지고 있는 변수와 메서드를 사용한다' 는 뜻
  • ex)
t.channel = 7;			// Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
t.channelDown();		// Tv인스턴스의 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다.");

3. 예제 코드

package ch06;

public class Ex6_1 {
    public static void main(String[] args) {
        Tv t;               // 기본 8가지 타입이 아니기떄문에 Tv는 참조변수
                            // Tv클래스 타입의 참조변수
        t = new Tv();       // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
        t.channel = 7;      // (변수사용) Tv인스턴스의 멤버변수 channel의 값을 7로 한다
        t.channelDown();    // (메서드호출)
        System.out.println("현재 채널은 " + t.channel + " 입니다.");
    }
}

class Tv { 
	// Tv의 속성(멤버변수)
	String color;           // 색상 
	boolean power;         	// 전원상태(on/off) 
	int channel;           	// 채널 

	// Tv의 기능(메서드) 
	void power()   { power = !power; }  // TV를 켜거나 끄는 기능을 하는 메서드  
	void channelUp()   { channel++; }  	// TV의 채널을 높이는 기능을 하는 메서드
	void channelDown() { channel--; }   // TV의 채널을 낮추는 기능을 하는 메서드
}

ch6-7. 객체의 생성과 사용 - 예제

Tv t1 = new Tv();
Tv t2 = new Tv();
t2 = t1;
t1.channel = 7;
System.out.println("t1의 channel값은 " + t1.channel + " 입니다.");
System.out.println("t2의 channel값은 " + t2.channel + " 입니다.");
  • t10x1000x100

    null
    false
    0
    power()
    channelUp()
    channelDown()
  • t20x2000x200

    null
    false
    0
    power()
    channelUp()
    channelDown()
  • 일때, t2 = t1; 으로 t20x200 부분이 쓸모없어지게 됨.

  • 즉 메모리만 차지하는 불필요한 변수가 됨.

  • 이때 등장하는게 GC(Garbage Collecter : 청소부)

  • 주기적으로 메모리를 확인하고 있다가 사용할수 없게 된 변수(가 차지하는 메모리)를 제거

  • 원래는 메모리 사용량을 개발자가 정하고, 사용 후 메모리를 정리해야하는데, GC가 알아서 해줌. 편리함

정리

  1. 인스턴스는 참조변수를 통해서만 다룰 수있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
  2. 하나의 인스턴스를 여러개의 참조변수가 가리키는 경우 (가능)
    t10x100 (O)
    t20x100 (O)
    0x100
    0x100
    color
    power
    channel
  3. 여러 인스턴스를 하나의 참조변수가 가리키는 경우(불가능)
    t1이 Tv클래스 여러개를 참조하는것 불가능
    t10x100
    t10x200 (X)
    0x100
    0x100
    color
    power
    channel
    `0x200`
    0x200
    color
    power
    channel

ch6-8. 객체배열

  • 객체배열 == 참조변수 배열
  • Tv tv1, tv2, tv3 → Tv[] tvArr = new Tv[3];
  • Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열
  • 객체를 생성해서 배열의 각 요소에 저장
    • tvArr[0] = new Tv();
    • tvArr[1] = new Tv();
    • tvArr[2] = new Tv();
  • Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
  • ex) 객체 배열 생성 → 배열안에 객체 생성
public class arrEx6_8 {
    public static void main(String[] args) {
        Tv[] tvArr = new Tv[3];     // 1. 객체 배열 생성 (참조변수 배열 생성)
        System.out.println("==1= tvArr : " + Arrays.toString(tvArr));
        tvArr[0] = new Tv();        // 2. 배열안에 객체 생성 (참조변수 배열 안에 참조변수 생성)
        tvArr[1] = new Tv();
        tvArr[2] = new Tv();
        System.out.println("==2= tvArr : " + Arrays.toString(tvArr));
    }
}
profile
The best

0개의 댓글