본문 바로가기
JAVA

[JAVA] 김영한의 실전 자바 - 기본편 : 클래스, 배열

by 집돌이디벨로퍼 2025. 1. 14.

자바에서 멤버 변수, 필드는 같은 뜻이다 => 클래스에 소속된 변수를 뜻한다.

 

클래스와 사용자 정의 타입

학생을 관리하기 쉽게 학생이라는 타입을 만들면 편하지 않을까?

=> 사용자가 직접 정의하는 사용자 타입을 만들려면 설계도가 필요한데 이 설계도가 바로 클래스이다.

 

실제 메모리에 만들어진 클래스 => "객체" 또는 " 인스턴스 "  라고 부른다.

        Student student2 = new Student();

 

=> 인스턴스

 

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

1. Student 클래스를 이렇게 만들어 놓으면 객체를 생성하기 전에 메모리를 미리 확보해놓는다

2. 객체를 생성하면 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조값(주소)를 반환한다.

=> new 키워드로 객체를 생성하면 참조값을 반환한다. (클래스를 직접 불러오는 것이 아닌 참조값으로 실제 객체에 접근하는 것이다.)

 

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

        Student student2 = new Student(); // x002
        student2.name = "학생2";
        student2.age = 16;
        student2.grade = 80;
  System.out.println(student1);
  System.out.println(student2);
  
class01.Student@6acbcfc0 //@6acbcfc0  student1 의 참조값
class01.Student@5f184fc6 //@5f184fc6 student2 의 참조값

 

객체 사용

객체 접근시 .(닷) 을 사용

 

클래스,객체, 인스턴스 정리

클래스 - 설계도

인스턴스 or 객체 - 설계도를 사용해 만든 어떤 물건

 

객체 : 클래스에서 정의한 속성과 기능을 가진 실체이다, 객체는 서로 독립적인 상태를 가진다.

 

인스턴스 :(아직 모호한 개념) 인스턴스는 특정 클래스로부터 생성된 객체를 의미한다. 그래서 객체와 인스턴스라는 말은 자주 혼용된다. 인스턴스는 주로 객체가 어떤 클래스에 속해있는지 강조할때 사용된다. 용어상 인스턴스는 객체보다 좀 더 관계에 초점을 맞춘 단어이다. 우리가 인스턴스라고 부르는 순간은 특정 클래스로부터 그 객체가 생성되었음을 강조하고 싶을때 사용하는것

=> ex) student1 객체는 Student 클래스의 인스턴트다. (소속표기하는 느낌)이렇게 표현한다.

 

배열

배열을 사용하면 특정 타입을 연속한 데이터 구조로 묶어서 편리하게 관리할 수 있다.

        Student[] students = new Student[2]; // 배열은 몇개만들지 갯수 정해줘야함

이렇게 배열을 생성해주면 아직 참조값을 대입하지 않았기 때문에 null값으로 초기화 된다.

 

자바에서의 대입은 항상 변수값에 들어있는 값을 복사한다.

 

Student[] students = new Student[2]; // 배열은 몇개만들지 갯수 정해줘야함
        students[0] = student1; // student1 의 참조값을 배열에 대입한다
        students[1] = student2; // student2 의 참조값을 배열에 대입한다

참조값을 복사해서 넣었기 때문에 인스턴스가 2개가 아닌 1개인 것이다 따지자면 참조값 같은것이 2개인 것이다

 

students[0].name

배열에 저장된 참조값으로 객체에 접근하고 .(닷)으로 객체 내부의 name 필드 값을 꺼낸다.

 

 

축약1

for (int i=0; i<students.length ; i++){
            Student s = students[i];
            System.out.println("이름:"+ s.name + " 나이:"+s.age+" 성적:"+s.grade);
        }

 

 

축약2

for( Student s : students){
            System.out.println("이름:"+ s.name + " 나이:"+s.age+" 성적:"+s.grade);
        }

너무 길다 싶을땐 축약도 가능하다.