package class1;
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명이라 입력이 쉽지만, 만약 학생이 100명이라면...? => 엄청난 양의 데이터를 입력해주어야한다.
이러한 문제를 해결하기 위해, 배열을 사용해본다 .
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개의 배열 ( 이름, 나이, 등급 )에 나누어져있다. 따라서 데이터를 변경할 때 매우 조심해서 작업해야 한다. 한 학생의 데이터를 관리하기 위해 3개 배열에 인덱스의 순서를 정확하게 맞추어야 한다.
학생이라는 개념을 하나로 묶는 것이 좋다. => 이게 바로 클래스 !
public class Student {
String name;
int age;
int grade;
}
student라는 클래스를 생성 => class 키워드를 사용해서 학생 클래스를 정의한다. 학생 클래스는 내부에 이름, 나이, 등급 변수를 가진다.
이렇게 클래스의 정의한 변수들을 멤버 변수 또는 필드라 한다.
- 멤버 변수 : 이 변수들은 특정 클래스에 소속된 멤버이기 때문에 이렇게 부른다.
- 필드 : 데이터 항목을 가르키는 전통적인 용어이다.
클래스는 관례상 대문자로 시작하고 낙타 표기법을 사용한다.
public class ClassStart3 {
public static void main(String[] args) {
Student student1;
student1 = new Student(); // 학생을 실제로 메모리에 만든다. ( 사용할 수 있게 됨 )
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
System.out.println("이름" + student1.name + "나이" + student1.age + "등급" + student1.grade);
System.out.println("이름" + student2.name + "나이" + student2.age + "등급" + student2.grade);
}
}
클래스와 사용자 정의 타입
- 타입은 데이터의 종류나 형태를 나타낸다.
- int라고 하면 정수 타입, String이라고 하면 문자 타입이다.
- 학생(Student)이라는 데이터를 관리할 수 있는 타입을 만들면 되지 않을까? 라고 생각할 수 있음
- 클래스를 사용하면 int, String 과 같은 타입을 직접 만들 수 있다.
- 사용자가 직접 정의하는 사용자 정의 타입을 만들려면 설계도가 필요한데, 이 설계도가 바로 클래스이다.
- 설계도인 클래스를 통해서 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라고 한다.
- 클래스를 통해서 사용자가 원하는 종류의 데이터 타입을 마음껏 정의할 수 있다.
용어 : 클래스, 객체, 인스턴스
클래스는 설계도이고, 이 설계도를 기반으로 실제 메모리에 만들어진 ( new ) 실체를 객체 또는 인스턴스라 한다.
둘다 같은 의미로 사용되고, 여기서는 학생 클래스를 기반으로 학생1, 학생2 객체 또는 인스턴스를 만든 것이다.
1. 변수 선언
Student student 1
- Student 타입을 받을 수 있는 변수를 선언한다.
- int는 정수를 String은 문자열을 담을 수 있도록 Studnet는 Studnet 타입의 객체를 받을 수 있다.
2. 객체 생성
student1 = new Student()
- Student 클래스 정보를 기반으로 새로운 객체를 생성하라는 뜻으로 메모리에 실제 Student 객체를 생성한다.
- 객체를 생성할 때는 new 클래스명 ( )을 사용하면 된다.
- Student 클래스는 String name, int age, int grade 멤버 변수를 가지고 있다. 이 변수를 사용하는데 필요한 메모리 공간도 함께 확보한다.
3. 참조값 보관
student1 = x001; ( 인스턴스 참조값 보관 )
- 객체를 생성하면 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조값 주소 (x001)을 반환한다.
- new 키워드를 통해 객체가 생성되고 나면, 참조 값을 반환한다. 앞서 선언한 변수인 Student student1에 생성된 객체의 참조값(x001)을 보관한다.
- Student student1 변수는 이제 메모리에 존재하는 실제 Student 객체의 참조값을 가지고 있다. 따라서 이 변수를 통해서 객체에 접근하고 사용할 수 있다.
참조값을 변수에 보관하는 이유
- 객체를 생성하는 new Student( ) 코드 자체에는 아무런 이름이 없다. 이 코드는 단순히 Student 클래스를 기반으로 메모리에 실제 객체를 만드는 것이다. Student student1 변수에 참조값을 저장해두었으므로 저장한 참조값을 통해 실제 메모리에 존재하는 객체에 접근할 수 있다.
공부 내용: [인프런] 김영한의 실전 자바 - 기본편
'Java' 카테고리의 다른 글
[인프런] 배열 (0) | 2024.05.20 |
---|---|
[인프런] 클래스의 사용 및 크래스, 객체, 인스턴스의 정리 (0) | 2024.05.20 |
문자열 포함 여부 확인 ( contains , containsIgnoreCase ) (0) | 2024.05.01 |
Java 문법) 컬렉션 프레임워크 - Map 컬렉션 (0) | 2023.11.03 |
Java 문법) 컬렉션 프레임워크 - Set 컬렉션 (0) | 2023.11.03 |