❗해당 포스팅은 인프런에서 제공해주는 강의 내용을 개인적으로 정리하였음을 알려드립니다.
학생들의 정보를 출력하는 시스템이 있다고 가정하자
1. 변수 사용
public class ClassStart1 {
public static void main(String[] args) {
String student1Name = "학생1";
int student1Age = 15;
int student1Grade = 90;
String student2Name = "학생2";
int student2Age = 16;
int student2Grade = 80;
System.out.println("이름:" + student1Name + " 나이:" + student1Age + " 성적:" + student1Grade);
System.out.println("이름:" + student2Name + " 나이:" + student2Age + " 성적:" + student2Grade);
}
}
위 코드의 문제점은 학생이 추가될 때마다 변수를 추가적으로 선언해야하며, 출력하는 코드도 추가해야한다.
2. 배열 사용
public class ClassStart2 {
public static void main(String[] args) {
String[] studentNames = {"학생1", "학생2"};
int[] studentAges = {15, 16};
int[] studentGrades = {90, 80};
for (int i = 0; i < studentNames.length; i++) {
System.out.println("이름:" + studentNames[i] + " 나이:" + studentAges[i] + " 성적:" + studentGrades[i]);
}
}
}
배열을 선언함으로써 변수를 추가하지 않아도 되고, 출력 코드도 하나로 통일됐지만, 여전히 문제가 남아있다.
학생을 제거할 때 정확한 인덱스에서 이름,나이,성적을 제거해야하는데, 실수할 가능성이 높기때문이다.
이름, 나이, 성적별로 관리하는 것보다 학생별로 이름, 나이, 성적을 관리하는 것이 더 편리하다.
3. 클래스 사용
public class Student {
String name;
int age;
int grade;
}
학생별로 관리하기 위해 Student 클래스를 작성한다.
클래스에 정의된 변수는 멤버변수 또는 필드라 부른다.
클래스는 관례상 대문자로 시작하고, 낙타표기법을 사용한다.
public class ClassStart3 {
public static void main(String[] args) {
Student student1;
student1 = new Student(); //x001
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2;
student2 = new Student(); //x002
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
System.out.println(student1);
System.out.println(student2);
}
}
클래스의 의미는 학생(Student)이라는 타입을 새로 만드는 것이다.
int 타입이 있고, String 타입이 있듯이 Student 타입을 만든다.
이때, 클래스를 설계도, 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라고 한다.
클래스 = 붕어빵 틀
객체 또는 인스턴스 = 붕어빵
즉, Student 클래스를 기반으로 student1과 student2 객체 또는 인스턴스를 만들었다.
new Student()의 뜻은 Student 클래스 정보를 기반으로 새로운 객체를 생성하여, 메모리에 객체를 생성한다.
이렇게 객체를 생성한 후 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조값을 반환한다.
student1에 객체의 참조값을 보관하게된다.
이제 이 참조값이 저장된 변수를 사용하여 객체에 접근이 가능하다.
student1과 student2를 출력해보면 각각의 참조값을 확인할 수 있다.
(패키지+클래스정보)@(참조값)
'Back-end > Java' 카테고리의 다른 글
[Java] static 메서드 (1) | 2024.12.20 |
---|---|
[Java] static 변수 (0) | 2024.12.16 |
[Java] 자바 메모리 구조 (0) | 2024.12.14 |
[Java] 기본형과 참조형 (3) | 2024.12.03 |
[Java] 배열의 도입 (2) | 2024.11.27 |