아래 코드를 보면서 클래스가 왜 필요한지에 대해 생각해보자.
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);
}
}
위 코드는 학생 두 명의 정보를 입력하고 출력하는 코드이다. 여기서 이름, 나이, 성적을 입력하는 것이 중복되어서 보기 좋지 않다. 이를 배열로 묶어서 진행해도 되지만, 학생의 정보를 수정하거나 삭제할 경우 잘못 작업할 가능성이 있기 때문에 그리 좋은 방법은 아니다. 그렇다면 아래와 같은 질문을 하게 된다.
학생 정보에 대한 중복 코드를 수정/삭제 걱정 없이 편하게 만들 수 있는 방법은 없을까?
이것의 해답은 학생이라는 개념을 만들고, 학생의 이름, 나이, 성적을 모두 하나로 묶는 것이다. 이렇게 하나로 묶는 것을 클래스라는 개념을 통해 만들 수 있다.
클래스란?
자바에서의 int, String과 같은 타입 뿐만 아니라 사용자가 원하는 타입을 만들 수 있다. 이때 사용자가 원하는 타입을 만들기 위한 설계도 혹은 틀을 클래스라고 한다. 클래스에서 정의한 변수는 멤버 변수 혹은 필드라고 정의한다.
클래스를 통해 객체와 인스턴스를 만들 수 있는데, 실무에서는 둘 다 같은 의미로 혼용해서 사용한다.
- 변수 선언 및 클래스 객체 메모리에 생성
Student student1; // student1 변수 선언
student1 = new Student(); // Student 객체 메모리에 생성 후 참조값 반환 & 참조값 student1 변수에 대입
1. 참조값을 변수에 저장하는 이유
→ 실제 참조값을 가진 변수를 출력하면 객체가 저장된 메모리 주소가 담긴 문자열이 출력된다. 예시) class1.Student@7a81197d
2. new Student()는 메모리에 객체를 생성했지만, 이 자체로는 접근할 수 없다. 그래서 해당 주소값(참조값)을 student1이라는 변수에 저장해 객체에 접근가능하다.
객체란?
클래스에서 정의한 속성과 기능을 가진 실체이다. 같은 타입이라도, 각각의 객체는 서로 독립적인 상태를 가진다.
// 아래 두 Student의 객체 student1, student2는 다른 객체이다.
Student student1 = new Student();
Student student2 = new Student();
인스턴스란?
특정 클래스로부터 생성된 객체를 의미한다. ‘특정 클래스로부터 생성되었다’라는 관계를 의미한다. 예시로, student1 객체는 Student 클래스의 인스턴스이다(Student 클래스로 생성되었으므로).
Remind
자바 대원칙 : 자바에서 대입은 항상 변수에 들어있는 값을 복사한다.
그래서 new Student[]{student1, student2}; 처럼 student1, student2로 배열을 만들어도 student1 인스턴스가 아닌 student1의 참조값이 배열에 저장된다.
Reference
인프런 '김영한의 실전 자바 - 기본편'
'Dev Language > Java' 카테고리의 다른 글
[자바/기본] 3. 객체지향 프로그래밍 (0) | 2024.01.04 |
---|---|
[자바/기본] 2. 기본형과 참조형 (0) | 2024.01.04 |
[자바/입문] 8. 메서드 (2) | 2023.12.29 |
[자바/입문] 7. 배열 (0) | 2023.12.29 |
[자바/입문] 6. 스코프(scope), 형변환(type casting) (0) | 2023.12.29 |