<ClassStart1.java>
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);
}
}
=> 학생이 늘어날 때 마다 변수를 추가로 선언해야하고, 출력코드 또한 추가해야한다.
<ClassStart2.java>
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]);
}
}
}
=> 배열을 활용, 배열에 학생의 데이터만 추가하면 된다.
=> 배열의 한계 : 한 학생의 데이터를 지우기 위해 3개의 배열의 인덱스를 맞춰줘야한다.
학생이라는 개념을 하나로 묶고, 각각의 학생 별로 본인의 이름, 나이, 성적을 관리하자!
<Student 클래스>
<Student.java>
package class1;
public class Student {
String name;
int age;
int grade;
}
=> class 키워드를 사용해서 학생클래스(Student)를 정의, 학생 클래스 내부에 이름, 나이, 성적 변수를 가진다.
이렇게 클래스에 정의한 변수들을 멤버변수 또는 필드라고 한다.
- 멤버변수(Member Variable): 특정 클래스에 소속된 멤버
- 필드(Field): 데이터 항목을 가리키는 용어
- 자바에서 멤버변수, 필드는 같은 뜻이고 클래스에 소속된 변수를 뜻한다.
클래스는 관례상 대문자로 시작하고 낙타표기법을 사용
<ClassStart3.java>
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 = 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);
}
}
Student 클래스를 기반으로 student1, student2 객체 또는 인스턴스를 만들었다.
클래스를 통해 생성한 객체를 사용하려면 먼저 메모리에 존재하는 객체에 접근해야 한다. 객체에 접근하려면 . (점, dot)을 사용하면 된다.
student1.name
student1.age
student2.grade
...
클래스는 객체가 가져야할 속석(변수)과 기능(메서드)를 정의한다. 예를 들어 학생이라는 클래스 속성으로 name, age, grade를 가진다.
객체는 클래스에서 정의한 속성과 기능을 가진 실체이다. 객체는 서로 독립적인 상태를 가진다.
student1은 학생1의 속성을 가지는 객체이다.
인스턴스는 특정 믈래스로부터 생성된 객체를 의미한다. 인스턴스는 주로 객체가 어떤 클래스에 속해 있는지 강조할 때 사용한다.
student1 객체는 Student 클래스의 인스턴스이다.
인스턴스는 객테보다 좀 더 관계에 초점을 맞춘 단어이다. 보통 student1 은 Student 의 객체이다. 라고 말하는 대신 student1 은 Student 의 인스턴스이다. 라고 특정 클래스와의 관계를 명확히 할 때 인스턴스라는 용어를 주로 사용한다.
하지만 둘다 클래스에서 나온 실체라는 핵심 의미는 같기 때문에 보통 둘을 구분하지 않고 사용한다.
배열을 사용하면 특정 타입을 연속한 데이터 구조로 묶어서 편리하게 관리할 수 있다.
<ClassStart4.java>
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 = 16;
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 = 16;
student2.grade = 80;
//배열 선언
Student[] students = new Student[]{student1, student2};
//for문 적용
for (int i = 0; i < students.length; i++) {
System.out.println("이름:" + students[i].name + " 나이:" +
students[i].age + " 성적:" + students[i].grade);
}
}
}
Student[] students = new Student[]{student1, student2};
-> 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 (Student s : students) {
System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);
}
<MovieReview.java>
package class1.ex;
public class MovieReview {
String title;
String review;
}
<MovieReviewMain1.java>
package class1.ex;
public class MovieReviewMain1 {
public static void main(String[] args) {
MovieReview movieReview = new MovieReview();
movieReview.title="쿵푸팬더";
movieReview.review="재밌다.";
System.out.println("영화 제목 : "+movieReview.title+" 리뷰 : "+movieReview.review);
}
}
<MovieReviewMain2.java>
package class1.ex;
public class MovieReviewMain1 {
public static void main(String[] args) {
MovieReview[] reviews = new MovieReview[2];
MovieReview inception = new MovieReview();
inception.title = "인셉션";
inception.review = "인생은 무한 루프";
reviews[0] = inception;
MovieReview aboutTime = new MovieReview();
aboutTime.title = "어바웃 타임";
aboutTime.review = "인생 시간 영화!";
reviews[1] = aboutTime;
for (MovieReview review : reviews) {
System.out.println("영화 제목: " + review.title + ", 리뷰: " +
review.review);
}
}
}
<ProductOrder.java>
package class1.ex;
public class ProductOrder {
String name;
int price;
int quantity;
}
<ProductOrderMain1.java>
package class1.ex;
public class ProductOrderMain1 {
public static void main(String[] args) {
int total =0;
ProductOrder order1 = new ProductOrder();
order1.name = "사과";
order1.price=2000;
order1.quantity=3;
ProductOrder order2 = new ProductOrder();
order2.name = "바나나";
order2.price=1000;
order2.quantity=7;
ProductOrder[] orders = {order1,order2};
for(ProductOrder o : orders){
System.out.println("상품명:" +o.name+ " 가격:" +o.price+ " 수량:" +o.quantity);
total += o.price*o.quantity;
}
System.out.println("총 금액: "+ total);
}
}