조회수를 얻기위해 오랜만에 자바 기초를 정리해본다
- 참고 김영한 자바
변수 사용
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]); } }
배열을 사용한 덕분에 학생이 추가 되어도 배열에 학생의 데이터만 추가
배열사용의 한계
3개 배열의 인덱스 순서를 항상 정확하게 맞추어야 한다. 이렇게 하면 특정 학생의 데이터를 변경할 때 실수할 가능성이 매우 높다. 이 코드는 컴퓨터가 볼 때는 아무 문제가 없지만, 사람이 관리하기에는 좋은 코드가 아니다
클래스 도입
student 클래스
package class1;
public class Student {
String name; int age; int grade;
}
멤버 변수(Member Variable): 특정 클래스에 소속
필드(Field): 데이터 항목을 가리킴
자바: 멤버변수 = 필드
package class1; ** ,
MemberService
public class ClassStart3 { p
ublic 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); } }
클래스를 사용하면 설계도가 바로 클래스 이다. int , String
과 같은 타입을 직접 만들 수 있다
설계도가 바로 클래스
실제 메모리에 만들어진 실체를 객체 또는 인스턴스
용어: 클래스, 객체, 인스턴스
Student student1
- int 정수 String 문자 Student student 타입의 객체(인스턴스)를 받을 수 잇다
객체생성
student1 = new Student()//student 인스턴스 생성
new Student() = new는 새로 생성한다.
Student 클래스 정보를 기반으로 새로운 객체를 생성
Student 객체 (인스턴스)르ㅡㄹ 생성
객체를 생성 new 클래스명()을 사용 마지막에 ()도 추가
Student 클래스는 String name, int age, int grade 멤버변수를 가지고 있다
![[Pasted image 20240928201603.png]]
![[Pasted image 20240928201618.png]]
객체를 생성하면 자바는 메모리 어딘가에 있는 객체에 접근할 수 있는 참조값 (주소) (x001)을 반환한다 x001이라고 표현한 것 참조값
new 키워드를 통해 객체가 생성되고 나면 참조값을 반환
Student student1에 생성된 객체의 참조값(x001)을 보관한다
Stuent student1 변수는 이제 메모리에 존재하는 실제 Student객체(인스턴스)의 참조값을 가지고 있다
- student1변수는 방금 만든 객체에 접근할 수 있는 참조값을 가지고 있다
- stuent1 변수를 통해 메모리에 있는 실제 객체를 접근 사용할 수 있다
- 참조값을 변수에 보관해야하는 이유
- new Student() 코드자체에는 아무런 이르밍 없다
Student student1 = new Student(); //1. Student 객체 생성 Student student1 = x001; //2. new Student()의 결과로 x001 참조값 반환 student1 = x001; //3. 최종 결
Student클래스 기반으로 메모리에 실제 객체를 만든다
학생2(student2)까지 생성하면 Student객체(인스턴스)가 메모리에 2개 생성된다
r
객체사용
- 메모리에 존재하는 객체에 접근, 객체에 접근하려면, . 점(dot)을 사용하면 된다
student1.name = "학생1";
student1.age=15;
student1.grade=90;
//객체 값 사용
System.out.println("이름"+ stuent1.name +"나이" + stuent1.age+"성적"+student1.grade)
객체에 값 대입
객체가 가지고 있는 멤버변수(name, age, grade)에 대입하려면 먼저 객체에 접근 .dot키워드 사용 변수 (student1)에 들어잇는 참조값(x001)을 읽어서 메모리에 존재하는 객체에 접근한다
student1.name ="학생1" //studnet1객체의 name 멤버 변수에 값 대입
x001.name="학생1"// 변수에 있는 참조값을 통해 실제 객체에 접근 해당 객체의 name 멤버 변수에 값대입
![[Pasted image 20240928203838.png]]
클래스, 객체 인스턴스 정리
- 객체를 생성하기 위한 '틀' 또는 '설계도' 클래스는 객체가 가져야할 속성(변수)과 기능(메서드)를 정의한다 예를 들어 학생이라는 클래스 속성으로 name, age, grade를 ㄹ가진다
클래스, 객체, 인스턴스 정리 클래스 - Class
- 클래스는 객체를 생성하기 위한 '틀' 또는 '설계도'이다.
- 클래스는 객체가 가져야 할 속성(변수)과 기능(메서드)를 정의
객체 - Object
- 객체는 클래스에서 정의한 속성과 기능을 가진 실체이다
- student1은 학생1의 속성을 가지는 객체, student2는 학생2의 속성을 가지는 객체이다 student1과 student2는 같은클래스에서 만들어 졌지만 서로 다른 객체이다.
인스턴스 - instance
- 특정 클래스로부터 생성된 객체
- 인스턴스는 주로 객체가 어떤 클래스에 속해 있는지 강조
객체 vs 인스턴스
- 인스턴스는 객체보다 좀 더 관계에 초점을 맞춘 단어이다. 보통 student1
은
Student의 객체이다. 라고 말하는 대신 student1
은
라고 특정 클래스와의 관계를 명확히 할 때 인스턴스라는 용어를 주로 사용
- 인스턴스는 객체보다 좀 더 관계에 초점을 맞춘 단어이다. 보통 student1
배열 도입 - 시작
- 클래스와 객체 덕분에 학생 데이터를 구조적으로 이해하기 쉽게 변경
System.out.println("이름:" + student1.name + " 나이:" + student1.age + ...); System.out.println("이름:" + student2.name + " 나이:" + student2.age + ...)
배열에 참조값 대입
java Student
를 담을 수 있는 배열을 생성하고, 해당 배열에
Student[] students = new Student[2]; student1 ` , student2 ` ` `
인스턴스를 보관하자.
![[Pasted image 20240928205516.png]]
- Student 변수를 2개 보관할 수 있는 사이즈 2의 배열에 만든다
- Student 타입의 변수는 Student 인스턴스의 참조값을 보관한다
- studnet1, student2변수를 생각해보면 Student 타입의 참조값을 보관한다
-student[0] = student1;
-student[1]=student2;
//자바에서 대입은 항상 변수에 들어 있는 값을 복사한다
-students[0] =x001;
-students[1]=x002;
자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.
- student1
,
student2
student2에는 참조값이 보관되어 있다. 따라서 이 참조값이 배열에 저장된다.
- student1, student2보관된 참조값을 읽고 복사해서 배열에 대입한다고 표현한다
배열에 참조값을 대입한 이후 배열
studnet[] studnets -> x005
x001 = [0]
x002 =[1]
Student x001
, x002
` 의 참조값을 가진다. 참조값을 가지고 있기 때문에 인스턴스에 모두 접근
배열에 참조값을 대입한 이후 최종 그림
- 대입은 항상 변수에 들어 있는 값을 복사해서 전달
students[0] = student1; students[1] = student2;
- 자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.
students[0] = x001; students[1] = x002;
배열에 들어있는 객체 사용
학생1 예제
System.out.println(students[0].name); //배열 접근 시작 System.out.println(x005[0].name); //[0]를 사용해서 x005 배열의 0번 요소에 접근
System.out.println(x001.name); //.(dot)을 사용해서 참조값으로 객체에 접근
System.out.println("학생1");
학생2 예제
System.out.println(students[1].name); //배열 접근 시작
System.out.println(x005[1].name); //[1]를 사용해서 x005 배열의 1번 요소에 접근
System.out.println(x002.name); //.(dot)을 사용해서 참조값으로 객체에 접근
System.out.println("학생2")
배열 도입 - 리펙토링
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 타입도 일반적인 변수와 동일하게 배열생성
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 + ...); }
for문 - 반복 요소를 변수에 담아서 처리
for (int i = 0; i < students.length; i++) { Student s = students[i]; System.out.println("이름:" + s.name + " 나이:" + s.age + ...); }
- students[i].name, students[i].age처럼 students[i]를 자주 접근하는 것이 번거롭다면 반복해서 사용하는 객체를
- Students s와같은 변수에 담아두고 사용
향상된 for문(Enhanced For Loop)
for(Student s : students){
System.out.println("이름" + s.name + "나이" + s.age +
"성적" + s.grade);
}
문제: 영화 리뷰 관리하기1
1.MovieReview 영화 제목 ( 리뷰 내용 ( 클래스는 다음과 같은 멤버 변수를 포함해야 한다.
title
review
2.MovieReviewMain ) 클래스 안에 예시 코드 구조 **
public class MovieReview { String title; String review; } main() 메서드를 포함하여, 영화 리뷰 정보를 선언하고 출력
- 상품 주문 시스템 개발
-ProductOrder 클래스는 다음과 같은 멤버 변수를 포함해야한다
- 상품명 (productName)
- 가격(price)
- 주문수량(quantity)
-ProductOrderMain 클래스 안에 main 메서드를 포함하여 여러 상품의 주문 정보를 배열로 관리
public class ProductOrder { String productName; int price; int quantity; }
java public class ProductOrderMain {
public static void main(String[] args) {
// 여러 상품의 주문 정보를 담는 배열 생성
// 상품 주문 정보를 `ProductOrder` 타입의 변수로 받아 저장
// 상품 주문 정보와 최종 금액 출력 } }
제: 상품 주문 시스템 개발 문제 설명
당신은 온라인 상점의 주문 관리 시스템을 만들려고 한다. 먼저, 상품 주문 정보를 담을 수 있는 요구 사항
ProductOrder 상품명 ( 가격 ( 주문 수량 (
ProductOrder
productName
price
) ) 클래스를 만들어보자. 클래스는 다음과 같은 멤버 변수를 포함해야 한다.
quantity
ProductOrderMain ) 클래스 안에
main() 메서드를 포함하여, 여러 상품의 주문 정보를 배열로 관리하고, 그 정보들을 출력하고, 최종 결제 금액을 계산하여 출력하자. 3. 출력 예시와 같도록 출력하면 된다.
public class ProductOrder {
String productName;
int price;
int quantity;
public class ProductOrderMain { public static void main(String[] args) { // 여러 상품의 주문 정보를 담는 배열 생성 // 상품 주문 정보를 `ProductOrder` 타입의 변수로 받아 저장 // 상품 주문 정보와 최종 금액 출력 } } ```
public class ProductOrder {
String productName;
int price;
int quantity; }
a package class1.ex;
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 order : orders) { System.out.println("상품명: " + order.productName + ", 가격: " + order.price + ", 수량: " + order.quantity); totalAmount += order.price * order.quantity; } System.out.println("총 결제 금액: " + totalAmount); }
}