코드일기장

Java_객체의 생성과 사용법 (객체지향 1-2) 본문

Java/OOP

Java_객체의 생성과 사용법 (객체지향 1-2)

won_hyeok2 2021. 12. 20. 19:52

지난 시간에는 객체(Class)의 발전에 대해 이야기했다. 기본적인 용어 정리를 하고 객체의 생성과 사용법에 대해 알아보겠다.

 

 

객체: 모든 인스턴스를 대표하는 일반적 용어

인스턴스: 특정 클래스로부터 생성된 객체

 

 

인스턴스화)

 

클래스-> 인스턴스(객체)

(인스턴스화)

 

 

 

 

 

이제 Java로 객체를 생성하고 사용하는 방법에 대해 알아보자.


1. 객체의 생성

 

클래스 작성법에 대해 알아보자. 

 

클래스명 변수명;  (여기서 변수는 참조변수라고 불린다.)

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

 

기본적인 클래스 사용법과 참조변수  선언 방법이다. 

(인스턴스화)

 

 

class TestClass{
	int number;
	void up(){
		number++;
	}
}

class TestClass를 만들었다. class를 하나 만들었다는 소리이다.

TestClass의 멤버는 총 2개이다. (변수 1개, 메서드 1개)

 

class Main{
	public static void main(String args[]) {
		TestClass tc=new TestClass();
	}
}

Main class에 main메서드를 보면 TestClass tc= new TestClass()를 한 것이 보인다. 여기서 tc는 참조 변수이다. 

이제 참조 변수로 뭘 할 수 있는지 알아보겠다.

인스턴스(객체)를 만들었다는 소리와도 같은 말이다.

 


2. 객체의 사용

class Main{
	public static void main(String args[]) {
		TestClass tc=new TestClass();
		tc.number=5;
		System.out.println(tc.number);
		tc.up();
		System.out.println(tc.number);
	}
}

아까 작성한 class TestClass를 사용하는 방법이다.

tc 참조 변수를 사용하는 방법도 같은 말이다. 

tc.number (여기서 number는  TestClass의 멤버 변수이다.) tc.number=5로 초기화

 

tc.up() (여기서 up()은 TestClass의 메서드이다.)  TestClass의 up() 메서드 실행..

 

출력 결과는 다음과 같다.

 

 

결론적으로 class는 크게 3단계이다.

 

1. 클래스 작성  --> 2. 생성한 클래스를 main클래스에 참조 변수로 사용할 수 있게 끔 만들어 준다. --> 3. 참조 변수로 클래스 사용

 

2번은  인스턴스화라고 볼 수 있다. 어떠한 class->인스턴스(객체) 

         인스턴스화 한 객체를 사용하기 위해 참조 변수를 선언하고 참조 변수로 객체를 다루는 것이다.

 

클래스는 반드시 참조 변수로 사용할 수 있다. (결론)

 

 

 


 

또 하나의 클래스에 참조변수 딱 한 개만 선언할 수 있는 것도 아니다.

 

class Main{
	public static void main(String args[]) {
		TestClass tc=new TestClass();
		TestClass tc2=new TestClass();
		tc.number=5;
		tc2.number=50;
		System.out.println(tc.number+"   "+tc2.number);
		tc.up();
		tc2.up();
		System.out.println(tc.number+"   "+tc2.number);
	}
}

 

tc2라는 참조 변수도 생성했다. tc2 역시 TestClass의 참조 변수 이므로 TestClass의 멤버들을 다 사용할 수 있다.

 

tc2.number=50 인 점을 확인하라.

 

출력 결과는 다음과 같다.

 

 

이처럼 하나의 클래스의 참조 변수는 제한이 없다는 것을 알 수 있다.

 

 


 

Garbage Collection(가비지 컬렉션)

 

가비지 컬렉션은 따로 포스팅할 예정이다. 간단하게 JVM의 가비지 컬렉터의 불필요한 메모리를 알아서 정리해주는 것이다. (사용할 수 없는 객체들을 알아서 제거를 해주는 것이다.)

 

class Main{
	public static void main(String args[]) {
		TestClass tc=new TestClass();
		TestClass tc2=new TestClass();
		tc.number=5;
		System.out.println(tc.number+"   "+tc2.number);
		tc.up();
		tc2=tc;
		System.out.println(tc.number+"   "+tc2.number);
	}
}

tc2의 number값은 0이다. 초기화를 안 시켜줬기 때문이다. 바로 출력하면 0이 나올 것이다. 근데 만약 tc2에 tc를 대입하면 어떻게 될까? tc2가 tc로 대입되는 순간 tc2는 tc의 인스턴스(객체)를 가리키는 것이다.  그러므로 tc 참조 변수(인스턴스, 객체)의 number값을 출력한다.

 

 

결론적으로 tc2는 tc과 같은 주소를 가리키는 것이다. 그 이유는 tc2=tc  

tc2의 객체의 값은 그대로 0이지만 tc2=tc로 대입해 tc2는 tc의 인스턴스(객체) 멤버 변수 number를 가리켜 6을 출력시킨 거다.

또 한 tc2를 tc로 대입해 tc2의 객체는 사용 불가능해진다.  (가비지 컬렉터가 알아서 삭제해 준다.)

 

 

 

하나의 class를 여러 개의 참조 변수로 가리키는 경우는 가능하다. 

하지만, 여러 class를 하나의 참조 변수로 가리키는 경우는 불가능하다.

 

 

 

class Main{
	public static void main(String args[]) {
		TestClass tc=new TestClass();
		TestClass tc2=new TestClass();
		tc.number=5;
		//tc2.number=70;
		System.out.println(tc.number+"   "+tc2.number);
		tc.up();
		tc2=tc;
		System.out.println(tc.number+"   "+tc2.number);
		tc2.up();
		System.out.println(tc.number+"   "+tc2.number);
	}
}

 

이 코드 또 한 출력 결과와 비교하면서 보길 바란다.

 

 

 

 


🚀  이전 글 보기 (객체지향1-1)


 

 

 

 

 


🎈  다음 글 보기 (객체지향 1-3)


 

 

 

https://www.google.com/search?q=%EC%9E%90%EB%B0%94+%EB%AC%B4%EB%A3%8C+%EC%9D%B4%EB%AF%B8%EC%A7%80&tbm=isch&ved=2ahUKEwjKu_n2m_L0AhV4wosBHaXfCxAQ2-cCegQIABAA&oq=%EC%9E%90%EB%B0%94+%EB%AC%B4%EB%A3%8C+%EC%9D%B4%EB%AF%B8%EC%A7%80&gs_lcp=CgNpbWcQAzoHCCMQ7wMQJzoFCAAQgAQ6BAgAEBhQ6QRYtQ9gyBBoA3AAeAOAAX6IAcELkgEEMC4xM5gBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=cWHAYYq_H_iEr7wPpb-vgAE&bih=1089&biw=1920#imgrc=sHDGnvrUZv7rxM

Comments