Beny's Study

04.객체(생성->할당->사용)와 인스턴스 본문

[JAVA]/07. 객체지향

04.객체(생성->할당->사용)와 인스턴스

76beny 2022. 4. 6. 17:25
 

객체

 정의 : 실제로 존재, 사물이나 개념

 용도 : 객체가 가진 기능과 속성에 따라 다름

형식 : 속성(멤버변수) + 기능(메서드)

 예시) 유형객체 : 책상,의자,자동차, TV

           무형객체 : 수학공식, 프로그램에러 등

 

인스턴스

■ 클래스로부터 생성된 객체

*클래스가 인스턴스화되면 인스턴스 생성됨

 

객체 생성

■ 클래스에 미리 정의되어 있는 형식으로 객체 생성

■ new연산자를 사용하여 객체를 생성

■ 객체사용순서

클래스설계 -> 클래스를 이용해 객체생성 -> 생성된 객체사용

형식

객체 생성 형식

클래스명 변수명 ; // 클래스의 객체를 참조하기 위한 참조변수를 선언.

변수명 = new 클래스명 (); // 클래스의 객체를 생성한 후, 객체의 주소를 참조변수에 저장.

=>

클래스명 참조변수명 = new 클래스명( ) ;

예시 (Run.java파일)

public class Run{
	public static void main(String[ ] args) {
     		//1)
            Member mb; //member타입의 참조변수 mb를 선언
            mb = new Member(); // Member인스턴스를 생성한 후, 생성된 Member의 주소를 mb에 저장
            
            //2) 1번을 한번에 합친거
            Member mb = new Menber();
        }
  }

 

객체 생성 (할당)

■ heap영역에 객체를 생성한 후 주소를 리턴

■ 참조변수를 만들어 주소를 담아서 사용

■ 참조변수는 객체와 동일한 클래스 타입으로 생성해야 함

출처 : 자바의정석

(a) 하나의 인스턴스(객체) 를 여러개의 참조변수가 가르기는 경우 ( 가능)

(b) 여러 인스턴스(객체) 를 하나의 참조변수가 가리키는 경우(불가능)

 

객체 사용

■ 생성된 객체의 속성(field)와 기능(method)를 사용하는 것

■ 객체 접근 연산자를 이용해서 객체에 접근

■ 객체 접근 연산자 = 도트(.) 연산자

■ 형식

[객체사용형식]

객체명.멤버변수명

객체명.멤버메소드명( )

예시

// 1. 객체의 생성
Member mb = new Member(); 
// Member클래스 타입의 참조변수 mb를 선언하고 => Member mb;
//Member()인스턴스를 생성한 후, 생성된 Member()인스턴스의 주소에 mb를 저장=> mb=new Member()

//2. 객체의 사용( 변수, 메서드사용)
mb.name = "홍길동"; // 멤버변수에 값 대입//mb인스턴스의 멤버변수 name의값을 "홍길동"으로 함
mb.setAge(20); // 멤버메소드 실행//mb인스턴스 메서드 set.Age(20)을 호출

// 출력
System.out.println("이름 : " + mb.name);
System.out.println("나이 : " + mb.getAge());

[실행결과]

이름 : 홍길동

나이 : 20

 

예문

■ 예문1 (자바의정석 3판)

class Ex6_1 { 
	public static void main(String args[]) { 
		//main이 있는 매서드와 소스파일의 이름은 동일해야함.그래야 실행됨
		Tv t;        // Tv인스턴스를 참조하기 위한 변수 t를 선언       
		t = new Tv(); // Tv인스턴스를 생성한다.(객체선언) 생성된 Tv인스턴스 주소를t에저장
		t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.//변수사용 
		t.channelDown(); // Tv인스턴스의 메서드 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의 채널을 낮추는 기능을 하는 메서드  
}

//출력하면 현재 채널은 6 입니다.

 

예문2 (자바의정석 3판)

class Ex6_2 {
	public static void main(String args[]) {
		Tv t1 = new Tv();  // Tv t1 ; t1 = new Tv();를 한 문장으로 가능
		Tv t2 = new Tv();
		System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
		System.out.println("t2의 channel값은 " + t2.channel + "입니다.");

		t1.channel = 7;  // t1이 가르키는 객체의 채널은 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값은 0입니다.

 


"본 인터넷 사이트 내의 모든 이미지, 문구, 콘텐츠, 내용 등에 대한 저작권은 76beny에게 있습니다.

이를 무단으로 도용, 복사, 전재, 재배포, 2차 변형 등을 할 경우

민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."

 

'[JAVA] > 07. 객체지향' 카테고리의 다른 글

06. 클래스 접근제한자  (0) 2022.04.07
05. 캡슐화  (0) 2022.04.07
03.클래스 (Class)  (0) 2022.04.06
02) 객체 지향 언어 (추상화,통합모델링언어)  (0) 2022.04.06
01) 객체지향 프로그래밍  (0) 2022.04.06