백엔드 수업 #06 클래스 - 04 객체 생성과 클래스 변수

sookyoung.k·2022년 11월 14일
2
post-thumbnail

클래스 선언 = 객체를 생성할 설계도가 만들어진 것!

// 객체 생성 방법  
new 클래스(); 
  • new는 클래스로부터 객체를 생성시키는 연산자
  • 연산자 뒤에는 생성자가 온다 (클래스()형태)
  • new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성된다.
  • new 연산자는 힙 영역에 객체를 생성시킨 후, 객체의 주소 리턴

하... 여기부터 대가리가 깨져버리는 것입니다. 머라는거야 ㅅㅂ... 차근차근... 예제를 뜯어보겠습니다...

// 클래스 선언 
public class Student {
}

// 클래스로부터 객체 생성 (StudentExample 클래스의 main() 메소드에서 Student 객체 생성)
public class StudentExample {
	public static void main(String[]args) {
    	Student s1 = new Student(); // 객체 생성 
        // new 연산자를 사용하였기 때문에 객체가 메모리에 생성됨 
        System.out.println("s1 변수가 Student 객체를 참조합니다.");
        // 힙 영역에 객체가 생성되면 변수가 객체를 참조한다! 
        
        Student s2 = new Student(); // 같은 클래스로부터 생성되었지만 각각의 개체는 자신만의 고유한 데이터를 갖는다. 
        // s1과 s2가 참조하는 Student 객체는 완전히 독립된 서로 다른 객체임 
        // 객체들은 Student 클래스의 인스턴스들!
        System.out.println("s2 변수가  또 다른 Student 객체를 참조합니다.");
    }
}
  • 위를 실행시키면 메모리에 클래스 변수와 객체 생성

  • new 연산자를 통해서 객체를 생성함. 그리고 객체의 주소를 리턴 시킴. 리턴된 주소는 변수(s1, s2)에 저장된다.
    new는 앞서 이야기했지만 값을 저장하는 것이 아니라 주소를 저장하는 것임. (new 연산자는 객체 주소 리턴함)

  • 스택 영역: 변수(객체의 주소)

  • 힙 영역: 객체(객체 -> 주소 리턴)

  • stack 영역: s1, s2 /힙 영역: student객체, student객체 (각각 참조됨)


  • new 연산자를 통해 생성된 객체에 저장된 주소를 클래스 변수(참조 타입)에 저장(s1, s2)해두면, 변수를 통해서 객체 사용 가능.
public class Student {
// 라이브러리 클래스 (필드, 생성자, 메소드)
...
}

public class StudentExample { 
// 실행 클래스 (실행하기 위한 코드)
	public static void main(String[]args) {
    	Student s1 = new Student(); 
        System.out.println("s1 변수가 Student 객체를 참조합니다.");
                
        Student s2 = new Student(); 
        System.out.println("s2 변수가  또 다른 Student 객체를 참조합니다.");
    }
}
  • 라이브러리 클래스: 다른 클래스에서 이용할 목적으로 설계됨
  • 실행 클래스: 프로그램의 실행 진입점인 main() 메소드를 제공하는 역할
  • 실행 클래스는 단 하나...!
  • 라이브러리 클래스와 실행 클래스를 합칠 수도 있지만 대부분의 객체 지향 프로그램은 라이브러리 (부품 객체 및 완성 객체)와 실행 클래스가 분리되어 있다.
profile
영차영차 😎

4개의 댓글

comment-user-thumbnail
2022년 11월 15일

무슨 말인지 잘 모르겠지만 아무튼 짱입니다

1개의 답글