클라우드 낚시꾼

[JAVA 자바] 클래스와 객체 생성 + 내부 동작 알아보기 본문

Programming Language/JAVA

[JAVA 자바] 클래스와 객체 생성 + 내부 동작 알아보기

KanuBang 2023. 12. 29. 14:21
728x90

이번 글에서는 JAVA에서 어떻게 클래스를 통해 객체를 생성하고, 내부적으로는 무슨 일이 발생하는 지에 대해 알아볼 것이다. 먼저, 개념을 알아보자.


클래스, 객체, 인스턴스

클래스, 객체, 인스턴스

  • 클래스: 객체의 설계도로서 객체의 특징(멤버 변수)기능(메서드)을 포함하고 사용자 정의 타입으로 불린다 (ex) 아이폰 설계도
  • 객체: 클래스로부터 만들어져 메모리에 존재하는 실체  (ex) 생성된 아이폰
  • 인스턴스: 클래스로부터 만들어진 실체로서 특정 클래스로부터 생성된 객체를 의미  (ex) 생성된 아이폰

객체, 인스턴스는 클래스로부터 만들어진 실체라는 점만 기억하면 된다. 인스턴스는 객체보다 조금 더 클래스와의 관계를 강조하는 용어이다. 아래는 그 예시다.

  • Student 클래스를 인스턴스화 하여 student1 객체를 생성
  • student1 객체는 Student 클래스의 인스턴스

클래스, 객체 자바 코드 내부 동작 과정

아래 프로그램은 Student 클래스로 Student 객체를 생성하여 그 객체를 다루는 프로그램이다.

package class1;

public class Student {
     String name;
     int age;
     int grade; 
}

public class ClassStart3 {
    public static void main(String[] args) {

        Student stud1 = new Student();
        stud1.name = "학생1";
        stud1.age = 15;
        stud1.grade = 90;

        Student stud2 = new Student();
        stud2.name = "학생2";
        stud2.age = 16;
        stud2.grade = 80;

        System.out.println("이름1 : " + stud1.name + " 나이: " + stud1.age + " 성적: " + stud1.grade);
        System.out.println("이름2 : " + stud2.name + " 나이: " + stud2.age + " 성적: " + stud2.grade);
    }
}
  1. Student stud1 -> Student 클래스 타입 변수 선언
    • Student 클래스 변수를 생성하면 Student 객체의 참조값을 저장할 수 있는 참조 변수가 생성된다.
  2. stud1 = new Student() -> new 연산자로 Student 객체를 메모리에 생성
    • Student 클래스 설계도를 따라 실제 Student 객체를 만들어 메모리에 저장한다.
    • 메모리 공간에는 그 객체가 가지고 있는 멤버 변수, 메서드가 저장된다.
  3. stud1 = x001 -> new 키워드는 객체를 생성하고 그 객체의 참조값을 반환한다.
    • 앞서 선언한 변수인 `Student student1`은 생성된 객체의 참조값( `x001` )을 보관한다.

    • student1 변수는 이제 참조값(x001)에 있는 Student 객체에 접근할 수 있다. 
  4. stud1.name = "학생2" -> stud1에 저장된 참조값을 통해 실제 메모리에 존재하는 객체에 접근하여 name 멤버에 값을 저장한다.
    • 참조 변수가 가진 참조값을 통해 실제 메모리에 접근할 때는 '.'을 이용한다.

그림으로 간단하게 이해하기

출처) 김영한 자바 기본편 - 그림으로 클래스 객체 이해


요약 및 TMI

지금까지 한 내용을 간단하게 코드로 나타내면 다음과 같다.

Student student1 = new Student(); //1. Student 객체 생성
Student student1 = x001; //2. new Student()의 결과로 x001 참조값 반환
student1 = x001; //3. 최종 결과

 

TMI) 타입이 클래스인 변수를 출력하면 변수의 참조 값을 확인할 수 있다.


참고 및 출처

이 글을 김영한 개발자 님의 강의를 듣고 작성했습니다.

 

김영한의 실전 자바 - 기본편 강의 - 인프런

실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다

www.inflearn.com

 

728x90