일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Spring Security
- ChatGPT
- jQuery
- SQL
- CSS
- vscode
- 웹개발
- 자바
- 오블완
- restapi
- java
- Eclipse
- 스파르타코딩클럽
- 깃허브
- 김영한
- HTML
- 코딩
- 이클립스
- JavaScript
- 배포
- github
- SQLD
- 기업설명회
- 티스토리챌린지
- error
- AJAX
- bootstrap
- myBatis
- spring
- Firebase
- Today
- Total
푸들푸들
[JAVA] 클래스, 객체 본문
ex
각 학생의 정보를 출력할 때
-> 변수를 사용해 학생 정보를 저장하고, 출력
public class Class1 {
public static void main(String[] args) {
String student1Name = "학생1";
int student1Age = 15;
int student1Grade = 90;
System.out.println("이름:" + student1Name + " 나이:" + student1Age + " 성적:" + student1Grade);
}
}
--> 학생이 늘어날 때마다 변수 새로 선언, 출력 코드도 추가
=> 배열 적용
public class Class2 {
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]);
}
}
}
--> 코드 변경 최소화 but 유지보수 어려움
=> 클래스 도입
public class Student {
String name;
int age;
int grade;
}
클래스에 정의한 변수들 = 멤버 변수 or 필드 (자바에서 같은 뜻)
- Member Variable : 특정 클레스에 소속된 멤버
- Field : 데이터 항목
public class Class3 {
public static void main(String[] args) {
Student student1; // 변수 선언
student1 = new Student(); // Student 인스턴스 생성
// student1 = x001; -> Student 인스턴스 참조값 보관
student1.name = "학생1"; // student1 객체의 name 멤버 변수에 값 대입
// x001.name="학생1" -> 변수에 있는 참조값을 통해 실제 객체에 접근, 해당 객체의 name 멤버 변수에 값 대입
student1.age = 15;
student1.grade = 90;
System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + student1.grade);
}
}
클래스 = Student, 객체 = student1, student2
System.out.println(student1);
결과: practice.Student@b4c966a = 패키지.클래스@참조
• 클래스 Class
= 설계도(붕어빵 틀), 객체가 가져야 할 속성(변수)과 기능(메서드) 정의
• 객체(인스턴스)
= 클래스를 사용해서 실제 메모리에 만들어진 실체(붕어빵)
• 객체 Object
= 클래스에서 정의한 속성과 기능을 가진 실체, 서로 독립적인 상태
• 인스턴스 Instance
= 특정 클래스로부터 생성된 객체, 객체가 어떤 클래스에 속해 있는지 강조할 때 사용
- 둘다 클래스에서 나온 실체라는 의미에서 비슷하게 사용되지만, 용어상 인스턴스는 객체보다 좀 더 관계에 초점을 맞춘 단어
배열
위 내용에 배열 도입
Student[] students = new Student[2];
students[0] = student1;
students[1] = student2;
/* 자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.
students[0] = x001;
students[1] = x002;
*/
자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.
- student1, student2에는 참조값이 보관되어 있다. 따라서 이 참조값이 배열에 저장된다. 또는 student1 , student2에 보관 된 참조값을 읽고 복사해서 배열에 대입한다고 표현한다.
** 주의
변수에는 인스턴스 자체가 들어있는 것이 아니다! 인스턴스의 위치를 가리키는 참조값이 들어있을 뿐이다! 따라서 대입 ( =)시에 인스턴스가 복사되는 것이 아니라 참조값만 복사된다
students[0].name -> 배열 접근 시작
x005[0].name -> [0]를 사용해서 x005 배열의 0번 요소에 접근 (students = x005)
x001.name -> .(dot)을 사용해서 참조값으로 객체에 접근 ( x005[0] = x001)
--> "학생1"
-> 리팩토링(반복문 도입)
/*
Student[] students = new Student[2];
students[0] = student1;
students[1] = student2;
*/
Student[] students = new Student[]{student1, student2};
- 생성과 선언을 동시에
Student[] students = {student1, student2};
- 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 + ...);
}
: 반복 요소(student[i])를 변수에 담아서 처리
- 향상된 for문
for (Student s : students) {
System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);
}
** 반복문 단축키: iter
예제
1. 영화 리뷰 관리하기
답:
public class MovieReviewMain {
public static void main(String[] args) {
MovieReview[] reviews = new MovieReview[2];
MovieReview movie1 = new MovieReview();
movie1.title = "인셉션";
movie1.review = "인생은 무한 루프";
reviews[0] = movie1;
MovieReview movie2 = new MovieReview();
movie2.title = "어바웃 타임";
movie2.review = "인생 시간 영화!";
reviews[1] = movie2;
for (MovieReview mr : reviews) {
System.out.println("영화 제목: " + mr.title + ", 리뷰: " + mr.review);
}
}
}
2. 상품 주문 시스템 개발
답:
public class ProductOrderMain {
public static void main(String[] args) {
ProductOrder[] orders = new ProductOrder[3];
ProductOrder order1 = new ProductOrder();
order1.productName = "두부";
order1.price = 2000;
order1.quantity = 2;
orders[0] = order1;
ProductOrder order2 = new ProductOrder();
order2.productName = "김치";
order2.price = 5000;
order2.quantity = 1;
orders[1] = order2;
ProductOrder order3 = new ProductOrder();
order3.productName = "콜라";
order3.price = 1500;
order3.quantity = 2;
orders[2] = order3;
int totalAmount = 0;
for (ProductOrder o : orders) {
System.out.println("상품명: " + o.productName + ", 가격: " + o.price + ", 수량: " + o.quantity);
totalAmount += o.price * o.quantity;
}
System.out.println("총 결제 금액: " + totalAmount);
}
}
'SELF-STUDY > JAVA 김영한' 카테고리의 다른 글
[JAVA] 패키지 (0) | 2025.04.04 |
---|---|
[JAVA] 생성자 (0) | 2025.04.03 |
[JAVA] 절차 지향, 객체 지향 프로그래밍 (2) | 2025.03.26 |
[JAVA] 변수와 초기화 (1) | 2025.03.25 |
[JAVA] 기본형, 참조형 (0) | 2025.03.25 |