Java/Java Study

[객체지향] 클래스, 객체, 인스턴스

모모토 2021. 4. 12. 16:47
반응형

● 클래스, 객체, 인스턴스? 대체 이것들은 무엇인가

 

프로그래밍을 접하면서 너무나도 어려웠던 개념들이다. 개발에 손을 대고 나서 2개월 차에야 감을 잡은 개념들이었던 거 같다 이해하기 힘든 만큼 한번 이해해놓으면 프로그래밍을 하는 데 있어서 시야가 넓어지는 느낌이고 코딩을 하면서 코드 간의 관계를 이해하는데 도움이 많이 된다.

 

클래스(class)란 무엇인가 하면 '객체'를 정의해놓은 것이라고 말할 수 있다. 흔히 쓰는 비유중 클래스는 설계도이고 객체는 그 설계도로 만든 제품이라고 표현한다. 클래스는 설계도이고 설계도로 만든 제품이 바로 객체이다. 그리고 클래스에서 객체를 생성하는 과정을 우리는 '인스턴스화(instantiate)'라고 부르며, 인스턴스(instance)와 객체는 같은 말이라고 봐도 무방하다. 다만, 자바나 프로그래밍 언어를 처음 접하는 사람은 이 3가지 용어를 굉장히 혼동하는 경우가 많다.

 

클래스 (class) ---> (인스턴스화) ---> 객체(instance)의 생성

 

결론적으로 우리가 필요로하고, 사용할 것은 객체이고 클래스는 그러한 객체를 생성하는 데 사용될 뿐이다. 따라서 객체지향 프로그래밍을 잘하기 위해선 클래스를 주의 깊게 잘 만들어야 할 필요가 있다는 것

 

클래스에서 만든 속성과 기능은 곧 객체의 속성과 기능이고, 속성은 멤버변수, 기능은 메서드를 의미한다고 생각하면 된다. 물론 이외에도 필드 특성 함수 등등 다양한 의미를 포함하기도 하지만 초보자 입장에선 이 정도만 알고 넘어가자

클래스는 설계도 객체는 제품이라는 개념을 가지고 아래 TV 클래스를 확인해보며 다시 이해해보자

 

class Tv {//Tv의 설계도
	//tv의 속성(멤버변수)
	String color; 
	boolean power;
	int channel;
	//tv의 기능(메서드)
	void power() {power = !power;}
	void channelUp() {++channel;}
	void channelDown() {--channel;}
}

public class TvTest {
	public static void main(String[] args) {
		Tv t; // 객체의 참조변수 선언
		t = new Tv(); // 'new'->객체의 주소(메모리공간)생성, '='->참조변수에 주소값 저장
		// Tv t = new Tv(); 위의 두줄을 한줄로 요약, Tv제품 완성(인스턴스 생성)
        
		t.channel = 7; // t라는 참조변수를 통하여 우리는 Tv라는 인스턴스를 조작할 수 있다.
		t.channelDown();
		System.out.println("현재 채널은"+t.channel+"입니다.");
	}
}

 

실행결과

 

더보기

현재 채널은6입니다.