객체의 생성과 사용
1. 객체의 생성
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명( ); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
TV t, // Tv클래스 타입의 참조변수 t를 선언
t = new TV( ); // Tv인스턴스(객체)를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
-> Tv t = new Tv( );
-> 객체를 다루려면 반드시 참조변수(1)가 필요하고 객체를 생성(2)한다음에 대입연산자(3)로 연결!
// 여기서 참조변수(리모컨)는 t
2. 객체의 사용
- 객체가 가지고 있는 변수(속성)와 매서드(기능)를 사용
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
t.channelDown( ); // Tv인스턴스의 메서드 channelDown( )을 호출한다.
System.out.println(“현재 채널은 “ + t.channel + “ 입니다.”);
-> 첫 번째는 변수를 사용하는 방법(변수 사용) 두 번째는 메서드를 사용하는 방법(메서드 호출)
(1) 클래스 작성(설계도) 2) 객체 생성(제품 만들기) 3) 객체 사용(제품 사용)
객체의 생성과 사용 예제
->> 두개의 참조변수로 하나의 객체를 가리키는 것은 가능(a)하지만 하나의 참조변수로 두 개의 객체를 가리키는 것은 불가능(b)(참조변수는 하나의 값만 저장할 수 있기 때문)
Tv클래스 예제
public class HelloClass1 {
public static void main(String[] args) {
Tv t; //Tv인스턴스를 참조하기 위한 변수 t선언
t = new Tv(); //Tv인스턴스를 생성
t.channel = 7; //Tv인스턴스의 멤버변수 channel의 값을 7로 저장
t.channelDown(); //Tv인스턴스의 메서드 channelDown()을 호출
System.out.println("현재 채널은 " + t.channel + " 입니다."); //현재 채널은 6 입니다.
Tv t1 = new Tv(); // Tv t1; t1 = new Tv();를 한 문장으로
Tv t2 = new Tv();
System.out.println("t1의 channel은 " + t1.channel + "입니다.");//0
System.out.println("t2의 channel은 " + t2.channel + "입니다.");//0
t1.channel = 7;
t2 = t1;
//참조변수 t1의 값을 t2에 저장, 실제 t2값은 그대로 있고 garbage collect가 안쓰는 t2값을 제거되었고, 참조변수가 없어서 기존 t2값을 쓸 수 없음
System.out.println("t1의 channel은 " + t1.channel + "입니다.");//7
System.out.println("t2의 channel은 " + t2.channel + "입니다.");//7
}
}
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의 채널을 낮추는 기능을 하는 메서드
}
객체 배열
객체 배열 == 참조변수 배열
객체의 배열은 객체를 담기 위한 것!
-> 객체 배열을 생성하고 꼭 객체를 생성해줘야 함! 항상 같이
선언위치에 따른 변수의 종류
영역별 선언된 변수(3가지)
1) 클래스 영역 (1) iv(인스턴스 변수), (2) cv(클래스 변수): static + iv
2) 메서드 영역 (3) lv(local variable, 지역변수)
-> 클래스 영역에는 선언문만 가능
변수의 종류 | 선언위치 | 생성시기 |
클래스 변수(class variable) | 클래스 영역 |
클래스가 메모리에 올라갈 때 |
인스턴스 변수 (Instance variable) |
인스턴스가 생성되었을 때(객체가 생성되었을 때) | |
지역변수(Local variable) | 클래스 영역 이외의 영역(메서드, 생성자, 초기화 블록 내부) | 변수 선언문이 수행되었을 때(메서드 종료 시 자동제거) |
- 객체는 iv(instance variable) 변수 묶음, iv는 객체마다 1개씩
- cv는 객체 생성이 필요 없음(아무 때나 사용가능), iv는 객체 생성이 필요(객체 생성을 해야 사용 가능)
클래스 변수와 인스턴스 변수
공통 속성 -> cv(클래스 변수), 개별 속성 -> iv(인스턴스 변수)
속성 중에 공통적으로 유지되어야 하는 것에 static 붙이기 -> cv = static + iv
class Card {
String kind; //무늬(개별)
int number; //숫자(개별)
static int width = 100; //폭(공통)
static int height = 250; //높이(공통)
}
Card c = new Card(); //객체 생성
c.kind = "HEART"; // 객체 사용(iv)
c.number = 5; //객체 사용(iv)
Card.width = 200; //클래스 이름.속성이름, 객체 사용(cv)
Card.height = 300; //클래스 이름.속성이름, 객체 사용(cv)
-> cv(클래스 변수)를 쓸 때 참조 변수를 쓰게 되면 iv랑 헷갈릴 수 있기 때문에 클래스 이름으로!
예) c.width = 200; x Card.width = 200;
'멀티캠퍼스 풀스택 과정 > Java의 정석' 카테고리의 다른 글
자바의 정석2-4 기본형 매개변수와 참조형 매개변수 (0) | 2021.12.31 |
---|---|
자바의 정석2-3 메서드의 개념(return문, 호출스택) (0) | 2021.12.31 |
자바의정석2-1 객체지향의 개념 (0) | 2021.12.30 |
자바의 정석1-8 배열들(String, 2차원)과 클래스(String, Arrays) (0) | 2021.12.30 |
자바의 정석1-7 배열 (0) | 2021.12.30 |