학생 정보 출력 프로그램 만들기
- 첫 번째 학생은 "학생1",15살,90점
- 두 번째 학생인 "학생2",16살,80점
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); } }
- 학생 두 명의 정보를 받기 위해 각각 다른 변수를 사용했다
- 코드의 문제점으로 학생이 늘어날 때 마다 변수를 추가로 선언해야 하고 코드가 계속해서 추가되어야 한다는 단점이 있다.
이전 문제를 배열을 이용해서 해결
package class1; 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]); } } }
- 배열을 사용해서 해결할 때는 또 다른 문제점이 있다
- 만약 데이터를 삭제한다고 가정할 때 이름,나이,성적은 각각 다른 배열에 존재하기 때문에 한 행의 정보를 삭제한다고 할 때 모든 배열에서 정확한 위치의 정보를 삭제 시켜줘야 한다.
- 결국 관리하기 어려운 프로그램이다.
Student Class
package class1 public class Student { String name; int age; int grade; }
package class1;
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; // 학생을 담아둘수 있는 클래스 변수를 선언함
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);
}
}
클래스 구동 원리
- 클래스 객체를 생성한다
- 참조값을 반환한다.
- 반환받은 참조값을 통해 객체에 접근하고 객체 안에 있는 변수에 접근할 수있다.
// 참조값 확인 System.out.println("student1의 참조값: " + student1); System.out.println("student2의 참조값: " + student2);
객체 접근 원리
- 참조값을 통해 객체에 접근한다
- 메모리 안에 있는 변수 이름으로 접근한다.
- 이름안에 접근하면 수정하고 싶은 내용을 수정한다.
Class
- 객체를 생성하기 위한 틀 또는 설계도
- 객체가 가져야할 속성(변수)와 기능(메서드)를 정의한다.
Object
- 객체는 클래스에서 정의한 속성과 기능을 가진 실체이다.
- 객체는 서로 독립적인 상태를 나타낸다.
- student1과 student2는 독립적인 객체이다.
Instance
- 특정 클래스로부터 생성된 객체를 말한다.
- student1은 Student 클래스의 인스턴스이다.
package class1;
public class ClassStart4 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 14;
student2.grade = 80;
// 클래스 배열을 사용하여 위에 객체들의 정보를 저장해보자
Student[] students = new Student[2];
students[0] = student1;
students[1] = student2;
System.out.println("이름: " + students[0].name + " 나이: " + students[0].age + " 성적: " + students[0].grade);
System.out.println("이름: " + students[1].name + " 나이: " + students[1].age + " 성적: " + students[1].grade);
}
}
package class1;
public class ClassStart5 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 14;
student2.grade = 80;
// 클래스 배열을 사용하여 위에 객체들의 정보를 저장해보자
Student[] students = {student1 , student2};
for(int i =0; i<students.length; i++){
System.out.println("이름: " + students[i].name + " 나이: " + students[i].age + " 성적: " + students[i].grade);
}
// 임의의 객체를 만들어 배열으로 선언하는 이름을 줄이는 방법
for(int i = 0; i<students.length; i++){
Student s = students[i];
System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
}
// for each로 최적화
for(Student s : students){
System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
}
}
}