클래스와 데이터에 대한 내용이 머릿속에 확실하게 정리되지 않은 것 같아, 인강을 다시 보며 복습하기로 하였다.
머리가 나쁘면 몸이 고생한다.
클래스가 필요한 이유 :
int[] studentAges = {15,16};
String[] studentNames ={"학생1", "학생2"};
int[] studentGrades = {90,80};
위처럼 데이터를 배열을 통해 관리하면 한 학생의 데이터가 3개의 배열에 나누어져 있기에 3개의 배열을 각각 변경해야 하는 어려움이 있다. 이렇게 하면 실수 가능성이 매우 높다.
이러한 문제를 해결하기 위해 학생이라는 개념을 하나로 묶는 것이다. 그 개념이 바로 클래스이다.
클래스를 사용해서 학생이라는 개념을 만들고, 각각의 학생 별로 이름 나이 점수를 관리 하는 것이다.
public class Student {
String name;
int age;
int grade;
}
이렇게 클래스에 정의한 변수들을 멤버 변수, 또는 필드라고 한다.
필드 : 데이터 항목을 가르키는 전통적인 용어
멤버 변수 : 특정 클래스에 소속된 멤버
자바에서는 멤버 변수, 필드는 같은 뜻이다.
**클래스는 관례상 대문자로 시작하고, 낙타 표기법을 사용한다.
***변수는 무조건 소문자.
ex)Student, User, MemberService
Student 클래스를 정의하였으니 사용을 해 보자.
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);
}
타입은 데이터나 종류의 형태를 나타낸다. int라면 정수 String이라고 하면 문자 타입이다.
위와 같은 클래스는 "Student라는 타입을 만든 것이다"
클래스를 사용하면 int, String과 같은 타입을 직접 만들 수 있다.
사용자가 직접 정의하는 사용자 정의 타입을 만들려면 설계도가 필요하다. "이 설계도가 바로 클래스"이다.
new 를 통해 Student타입으로 만들어진 실체가 객체 또는 인스턴스라고 불리는 것이다.
클래스는 설계도이고, 설계도를 기반으로 만들어진 실체를 객체라고 하는 것이다. 여기서는 학생 클래스를 기반으로 학생1, 학생2 객체 또는 인스턴스를 만들었다.
1. 변수 선언
Student student1
//Student 변수 선언이다. Student 타입을 받을 수 있는 변수를 선언한다. Student 타입의 객체를 받을 수 있다.
student1 = new Student()
//Student 인스턴스를 생성하고 그 인스턴스에 대한 참조값을 student1에 복사하여 대입한다.
객체를 생성하는 new Student() 코드 자체에는 아무런 이름이 없다. 이 코드는 단순히 Student 클래스를 기반으로 메모리에 실제 객체를 만들기만 하는 것이기에 생성한 객체에 접근할 수 있는 방법이 필요하다.
위와 같은 이유로 객체를 생성할 때 반환되는 참조값을 어딘가에 보관해야한다.
클래스를 통해 생성한 객체를 사용하려면 "."을 찍어 사용하면 된다.
위 예제를 예시로 들자면
student1.name ="학생1" 은 x001.name이 되고 x001에 해당하는 name 값에 접근하여 "학생1"을 넣게 된다.
println(student1.name) == println(x001.name)== "학생1"
이러한 사용자 정의 타입에도 배열을 도입할 수 있다.
Student[] students = new Student[2];
students[0] = student1;
students[1] = student2;
Student타입 변수를 보관할 수 있는 배열을 선언하고 배열 크기를 2로 하였다.
students = new Student[2]
//Student 타입 변수를 보관하는 배열의 참조값을 students에 보관하는 것이다. 참조값은 임의로 x005라 가정한다.
또한
students[0]번에는 student1의 참조값을, students[1]번에는 student2의 참조값을 대입하였다.
name을 찍는다고 가정하면
students[0].name이 되게 되는데 결국 이걸 풀어 본다면
students[0].name == x005[0].name == x001.name == "학생1"이 되게 된다.
* x005[0]의 배열엔 참조값 x001이 있다.
**중요 : 자바에서 변수의 대입은 변수에 들어있는 값을 복사해서 전달하는 것이다**
위의 print트 문도 for문과 iter(향상된 for문)을 통해 훨씬 간단하게 만들 수 있다.
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 (Student s : students) {
System.out.println("이름: " + s.name + "나이: " + s.age
+ " 성적: " + s.grade);
}
다음은 MovieReview클래스를 활용한 프린트 예제이다.
public class MovieReview {
String title;
String review;
}
public static void main(String[] args) {
MovieReview movieReview1 = new MovieReview();
movieReview1.title = "인셉션";
movieReview1.review = "인생은 무한 루프";
MovieReview movieReview2 = new MovieReview();
movieReview2.title = "어바웃 타임";
movieReview2.review = "인생 시간 영화!";
MovieReview[] movieReviews = new MovieReview[]{movieReview1,movieReview2};
for (MovieReview s : movieReviews) {
System.out.println("영화 제목: " + s.title + ", 리뷰: " + s.review);
}
}
MovieReview클래스와 배열을 사용하여 print하는 예제를 만들었다.
아래와 같은 출력 결과가 나온다
영화 제목: 인셉션, 리뷰: 인생은 무한 루프
영화 제목: 어바웃 타임, 리뷰: 인생 시간 영화!
다음은 메뉴 주문에 관련한 예제이다
public class ProductOrder {
String productName;
int price;
int quantity;
}
public static void main(String[] args) {
// Scanner scanner = new Scanner(System.in);
ProductOrder[] orders = new ProductOrder[3];
ProductOrder order1 = new ProductOrder();
order1.productName ="두부";
order1.price = 2000;
order1.quantity = 2;
ProductOrder order2 = new ProductOrder();
order2.productName ="김치";
order2.price = 5000;
order2.quantity = 1;
ProductOrder order3 = new ProductOrder();
order3.productName ="콜라";
order3.price = 1500;
order3.quantity = 2;
orders = new ProductOrder[]{order1, order2, order3};
int totalPrice=0;
for (ProductOrder order : orders) {
System.out.println("상품명: " + order.productName + " 가격: " +
order.price + " 수량: " + order.quantity);
totalPrice += (order.price* order.quantity);
}
System.out.println("총 결제 금액: " + totalPrice);
}
ProductOrder로 만들어진 order1, order2, order3 을 ProductOrder를 담을 수 있는 orders 배열에 담아 출력하였고, 총 결제 금액을 출력하는 예제이다.
'공부 > Java' 카테고리의 다른 글
자바 객체 지향 프로그래밍 (0) | 2024.08.30 |
---|---|
자바 기본형과 참조형 (0) | 2024.08.29 |
자바 객체 지향 프로그래밍과 절차 지향 프로그래밍 (0) | 2024.08.29 |
자바 Null (0) | 2024.08.28 |
자바 참조형과 메서드 호출 활용 (0) | 2024.08.28 |