package class1;
public class ClassStart1 {
public static void main(String[] args) {
// 데이터 변경시에 정확한 인덱스를 찾아서 제거하는 것이 너무 위험하다.
// 실수하기 좋은 코드, 컴퓨터는 상관없지만, 사람이 컨트롤하기 힘든 코드
// 하나로 묶어서 관리하는게 좋을 것 같다. -> 클래스
String[] studentName = {"학생1","학생2","학생3"};
int[] studentAge = {15,16,17};
int[] studentGrade = {90,80,70};
for(int i = 0; i < 3; i++){
System.out.println(studentName[i] + " " + studentAge[i] + " " + studentGrade[i]);
}
// 무지성 반복
String student1Name = "학생1";
int student1Age = 15;
int student1Grade = 90;
String student2Name = "학생2";
int student2Age = 16;
int student2Grade = 80;
String student3Name = "학생3";
int student3Age = 17;
int student3Grade = 80;
System.out.println(student1Name + " " + student1Age + " " + student1Grade);
System.out.println(student2Name + " " + student2Age + " " + student2Grade);
System.out.println(student3Name + " " + student3Age + " " + student3Grade);
}
}
package class1;
public class Student {
// 클래스에 정의한 변수들은 멤버 변수, 혹은 필드 라고한다.
// 필드 : 데이터 항목을 가르키는 전통적인 용어이다. DB,EXCEL 등에서 데이터 각각의 항목을 필드라 한다.
// 자바에서 멤버 변수, 필드는 같은 뜻이다. 클래스에 소속된 변수.
// 클래스는 관례상 대문자로 시작한다.
String name;
int age;
int grade;
}
package class1;
public class ClassStart3 {
public static void main(String[] args) {
Student student1;
// 학생을 실제 메모리에 생성
student1 = new Student();
// class 는 .을 통해 접근
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.name + " 성적:" + student1.grade);
System.out.println("이름:" + student2.name + " 나이:" + student2.name + " 성적:" + student2.grade);
// 타입은 데이터의 종류나 형태를 나타낸다.
// int는 정수타입, String이면 문자 타입.
// 학생 타입을 만들면 되지 않을까?
// 클래스를 사용하면 int, String과 같은 타입을 직접 만들 수 있다.
// 사용자가 직접 정의하는 사용자 정의 타입을 만들려면 설계도가 필요하고 이것이 클래스 입니다.
// 설계도인 클래스를 사용해서 실제 메모리에 할당된 것이 객체 또는 인스턴스 라고 한다.
// 클래스는 설계도, 이것을 통해 만들어진 것이 객체 or 인스턴스
// 위 코드는 설계도 Student를 통해 만들어진 student1, student2 인스턴스를 가지고 있다.
// new Student(): new는 새로 생성한다는 뜻이다.
// Student student1 = new Student(); 이 코드로 하나의 인스턴스가 생성되어 메모리를 할당 받는다.
// 메모리의 어딘가에 할당된 인스턴스 student1 객체를 어디있는지 찾기위해 참조값을 보관한다. student1 = 참조값의 위치
// student1 변수를 통해 객체를 접근(참고) 할 수 있다.
// 똑같이 student2 = 참조값 위치, new로 만들기 때문에 새로운 참조값을 가질 것.
System.out.println(student1);
System.out.println(student2);
// println 했을때 student가 저장된 참조값
// class1.Student@66a29884
// class1.Student@4769b07b
// 객체에 값 대입
// 객체가 가진 멤버 변수에 접근하려면 . 키워드를 사용하여 접근한다. 메모리에 존재하는 실제 객체에 접근하는 법.
// 객체는 클래스에서 정의한 속성과 기능을 가진 실체이다. 객체는 서로 독립적인 상태를 가진다.
// student1 student2 는 같은 클래스에서 만들어 졌지만 다른 객체이다.
// 인스턴스는 특정 클래스로부터 생성된 객체를 의미.
// student1 student2 는 Student 클래스에서 생성된 객체이다. 라는 뜻이다.
// 결론, 둘 다 거의 똑같다고 보시면 된다.
// 둘 다 클래스에서 나온 실체라는 것이 핵심 의미이다. 보통 구분하지 않고 사용하는 것 같다.
}
}
반응형
'BackEnd > Java' 카테고리의 다른 글
[Java] Optional(옵셔널) 이란? (0) | 2024.03.21 |
---|---|
[Java] Thread의 내부 생성자, 메소드 (0) | 2023.12.08 |
[Java] 김영한의 실전 자바 정리 2 - 패키지 ~ 메모리 구조와 static (1) | 2023.12.04 |
[Java] 김영한의 실전 자바 기본 공부 내용 정리 - 1 (0) | 2023.12.01 |
[Java] CheckException 과 UncheckedException의 차이 (0) | 2023.09.04 |