Q0. 개요
자바를 배우면서 가장 먼저 접했던 키워드는 변수이다.
그런대 이 변수와 인스턴스 그리고 객체는 어떻게 다른지 이해가 잘 가지 않았다.
그래서 비교하는 겸 제목에 언급했던 키워드(변수/상수/리터럴/인스턴스/객체)들에 대한 정의를 먼저 정리한다.
Q1. 키워드 정의 목록
잘 이해가 되지 않는 부분들이 있어서 예를 들어서 다시 정리해본다.
public class Main{ //클래스
class Sub1(){
private String str = "TEST"; //변수는 str를 리터럴 "TEST"로 초기화
private final int num = 3.14159; //변수이자 상수 num를 리터럴 3.14159로 초기화
}
class Sub2(){ //클래스
private String str; //변수 str를 선언
public String setStr(String str){ //메서드
this.str = str;
}
public String.getStr(){ //메서드
return str;
}
}
class Sub3(){
private String str; //변수 str를 선언
public String setStr(String str){ //메서드
this.str = str;
}
public String.getStr(){ //메서드
return str;
}
}
public static void main(String[] args){ //메인 메서드
Sub1 sb1 = new Sub1(); //객체이자 인스턴스
Sub1 sb2 = new Sub2(); //객체이자 인스턴스
Sub1 sb3 = new Sub3(); //객체이자 인스턴스
}
}
Q2. 참고로 변수선언과 초기화
선언이란, 빈 메모리의 저장 공간만을 할당한다는 의미이고
초기화/생성은 해당 공간에 값이 들어간다는 의미이다.
다시 예제 소스로 돌아와서 아무리봐도 객체와 인스턴스에 대해서는 정확하게 이해가 되지 않아서 더 찾아보았다.
자바에서 new키워드로 클래스의 객체를 생성하면, 해당 변수는 해당 클래스의 인스턴스가 된다.
Sub1 sb1 = new Sub1()를 보면, sb1는 Sub1클래스의 객체이자 인스턴스이다. 하지만, 보통 객체라고 사용한다.
그래도 객체와 인스턴스의 차이를 내가 이해한 대로 해석하자면 아래와 같다.
Sub1 sb1; //Sub1의 객체 선언
Sub2 sb2 = new Sub2(); //Sub2의 객체 초기화(=sb1이라는 객체는 인스턴스라고도 부른다)
//클래스의 인스턴스인지 아닌지를 확인
if(sb1 instanceof Sub1){
System.out.println("sb1객체는 Sub1클래스의 인스턴스이다")
} else {
System.out.println("sb1객체는 Sub1클래스의 인스턴스가 아니다")
}
//클래스의 객체인지 아닌지를 확인
if(sb2.getClass() == Sub2.class){
System.out.println("sb2객체는 Sub2클래스의 객체이다")
} else {
System.out.println("sb2객체는 Sub2클래스의 객체가 아니다")
}
Q3. 결론적으로
클래스를 선언하는 경우에는 객체.
클래스를 초기화하는 경우에는 객체이자 인스턴스
new키워드를 통해 생성하는경우는 무조건 객체이자 인스턴스라고 부른다고 정리할 수 있다.
'WEB 심화 > Back-End' 카테고리의 다른 글
[SPRING] AOP, Filter, Interceptor, DI, IOC 비교 정리 (0) | 2023.12.07 |
---|---|
[OS] 운영체제의 Shell과 주요 기능 (1) | 2023.11.27 |
[Java] 예외 처리 (try-catch와 throws) (2) | 2023.11.26 |
[Java] n자리 소수점까지만 출력 (0) | 2023.11.23 |
[Spring] Session Timeout 설정 방법 (0) | 2023.11.23 |