자바에서 멤버 변수, 필드는 같은 뜻이다 => 클래스에 소속된 변수를 뜻한다.
클래스와 사용자 정의 타입
학생을 관리하기 쉽게 학생이라는 타입을 만들면 편하지 않을까?
=> 사용자가 직접 정의하는 사용자 타입을 만들려면 설계도가 필요한데 이 설계도가 바로 클래스이다.
실제 메모리에 만들어진 클래스 => "객체" 또는 " 인스턴스 " 라고 부른다.
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);
}
너무 길다 싶을땐 축약도 가능하다.
'JAVA' 카테고리의 다른 글
[JAVA] 접근제어자 (0) | 2025.02.04 |
---|---|
[JAVA] 김영한의 실전 자바 기본편 - 절차 지향 프로그래밍 (1) | 2025.01.21 |
[JAVA] 김영한 자바 입문 - 배열 문제와 풀이 3 (0) | 2025.01.09 |
[JAVA] 2차원 배열 (0) | 2025.01.07 |
[JAVA] 1차원 배열 (0) | 2025.01.07 |