[Java] 참조타입과 클래스

민아·2022년 1월 2일
0
post-thumbnail

💁‍♀️ 오늘의 TIL

  • 참조타입과 클래스
    new 연산자가 등장하면서 뇌정지 오고 있는데 일단 정리해보자

📕 클래스

객체를 만들기 위한 틀
붕어빵이 객체라면, 붕어빵 틀은 클래스

public class 클래스 명 {
     클래스 블록
}
  • 객체를 만들기 위해 반드시 클래스를 먼저 만들어야 한다.
    클래스는 객체를 만들기 위한 일종의 틀이다.

✍ Car 객체 생성하기

public class CarExam {
	public static void main(Sting[] args) {
    	Car c1 = new Car ();
        Car c2 = new Car ();
    }
}
  • new 연산자는 new 앞에 나오는 생성자 Car를 이용하여 메모리에 객체(인스턴스)를 만든다.
  • 이렇게 만들어진 객체를 참조하는 변수는 c1, c2
  • Car라는 객체가 2개 만들어지고 각각의 객체를 참조하는 c1, c2변수가 선언된다.

📕 변수 타입

기본형 타입 : 논리형, 문자형, 정수형, 실수형
👉 기본형 타입은 클래스가 아니다.

참조형 타입 : 기본형 타입을 제외한 모든 타입 (배열, 클래스 등)

public class ReferenceDataType {
	public static void main(String[] args) {
    	int i = 4;
        
        String str = new String ("hello");
        
        // 변수앞에 기본형 타입이 아닌 String 타입이, new 뒤에는 생성자 String이 있다.
        // new 라는 키워드는 '클래스를 메모리에 올려주세요'
        // 메모리에 올라간 클래스는 인스턴스 라고 한다.
        // 인스턴스를 참조하는(가리키는) 변수는 str
   }
}
  • strString 인스턴스를 가지고 있는것이 아니라 String 인스턴스는 다른 메모리 영역에 있고 이 인스턴스를 참조하는 것

  • str 변수는 메모리 위치값을 저장


📕 String 클래스

  • 모든 클래스는 new 연산자를 이용하여 인스턴스화 함
  • 그러나 String 은 new라는 연산자를 이용하지 않아도 됨
  • 한번 생성된 String 클래스는 변하지 않는다.

예제

public class StringExam {
	Public static void(String[] args {
     		String str1 = "hello"; //hello 인스턴스를 상수 영역에 저장
      		String str2 = "hello"; //기존 hello 인스턴스를 가리킴

      		String str3 = new String("hello"); //새 인스턴스를 힙 영역에 저장
      		String str4 = new Strings("hello"); //각각 다른 hello 인스턴스를 가리킴

      		if(str1 == str2) 
      		System.out.println("str1 과 str2는 같은 레퍼런스이다.");

      		if(str1 == str3) 
          	System.out.println("str1 과 str3는 같은 레퍼런스이다.");

      		if(str3 == str4) 
      		System.out.println("str3 과 str4는 같은 레퍼런스이다.");   
    }
}

👉 결과

str1 과 str2는 같은 레퍼런스이다.

상수 영역과 힙영역

  • Runtime Data Area (프로그램을 수행하기위해 운영체제에서 할당받은 메모리공간) 에는 클래스, 스택, 힙 ,native, 메소드, pc 레지스터로 나뉘는데 상수는 클래스 영역에, new로 생성하면 힙 영역에 객체로 생성된다.
  • 그냥 서로 다른 영역에 생성된다고 생각

https://brownbears.tistory.com/519
참조 타입에 대해 깔끔하게 정리한 설명이 있어서 첨부한다.

profile
그냥 꾸준히 하는중

0개의 댓글