[ 새로운 패키지 생성 ]
> class생성시 패키지 확인필요**
* abstract 추상화 (객체생성 목적이 아닌 대략적으로 만들때)
[ 객체생성 + 참조타입 ]
필요한 정보와 필요없는 정보 구분 --> 필요한 정보만 넣고 만들자 (간략화** diet)
필요한 필드, 메소드 생각하고 (설계먼저) 만들기
package jun15;
//프로그램 로직에 필요한 것과 필요없는 것 생각하기**
public class Human {
// 필드
// 사람에게 필요한 정보 -> 필요한 정보만 남기고 필요없는거 빼버림
String name;
int age;
// 생성자
// 메소드
void myInfo() {
name = "Haehyun_Pyo";
age = 29;
age--;
System.out.println("내 이름은 " + name + "입니다.");
System.out.println("내 나이는 " + name + "살 입니다.");
}
public static void main(String[] args) {
Human h = new Human(); // 생성자
System.out.println("h : " + h); // h : jun15.Human@3d012ddd --> 패키지명+클래스명+주소
Human[] man = new Human[3];
System.out.println("array : " + man); // array : [Ljun15.Human;@626b2d4a --> 배열표시+패키지명+클래스명+주소
man[0] = h; // h (=Human클래스)를 참조 *
man[1] = new Human();
man[2] = new Human();
System.out.println("array[0] : " + man[0]); // array[0] : jun15.Human@3d012ddd
System.out.println("array[1] : " + man[1]); // array[1] : jun15.Human@5e91993f
System.out.println("array[2] : " + man[2]); // array[2] : jun15.Human@1c4af82c
}
}
* 이해 *
Human h = new Human();
Human[] man = new Human[3]; => (배열)객체생성, Human이 배열 man의 객체타입이됨
man[0] = h;
int[] arr = new int[3];
arr[0] = 1;
비슷한 형태!!
man[0] 은 h값을 참조하기 때문에 h의 값이 변경되면 같이 변경됨 (메모리주소가 같음)
package jun15;
public class Human {
....
}
public static void main(String[] args) {
Human h = new Human();
System.out.println("h : " + h); // h : jun15.Human@3d012ddd
Human[] man = new Human[3];
System.out.println("array : " + man); // array : [Ljun15.Human;@626b2d4a
man[0] = h;
man[1] = new Human();
man[2] = new Human();
man[1] = man[0]; // 값이 변경되면*********
System.out.println("array[0] : " + man[0]); // array[0] : jun15.Human@3d012ddd
System.out.println("array[1] : " + man[1]); // array[1] : jun15.Human@5e91993f
// -> *jun15.Human@3d012ddd
System.out.println("array[2] : " + man[2]); // array[2] : jun15.Human@1c4af82c
}
}
* man[1] = man[0];
값이 변경되면, 메모리에 저장되어 있던 man[1]의 값은 소거되고, man[0]이 참조하는 h를 참조.
>> 값이 소멸되면 그 값을 가지고 있는 집 자체가 사라진다고 생각.
(GC(Garbage Collector) => 메모리 자동관리, 즉시는 아니고 원할때)
package jun15;
public class Human {
String name;
int age;
void myInfo() {
name = "Pyo";
age = 2n;
age--;
System.out.println("내 이름은 " + name + "입니다.");
System.out.println("내 나이는 " + name + "살 입니다.");
}
public static void main(String[] args) {
Human h = new Human(); // 생성자
Human[] man = new Human[3];
man[0] = h;
man[1] = new Human();
man[2] = new Human();
man[1] = man[0];
h.name = "홍길동";
System.out.println(man[0].name); // 홍길동
System.out.println(h.name); // 홍길동 -> man[0]이 h값을 참조하기 때문
System.out.println(man[1].name); // 홍길동
System.out.println(man[2].name); // null
System.out.println(h == man[1]); // true _ R type에서 등호는 객체비교(값비교X)
System.out.println(h == man[2]); // false
Human h2 = man[0];
Object[] arr01 = new Object[3]; // *Object는 최상위타입
arr01[0] = h;
arr01[1] = 1000;
arr01[2] = "이것도 됩니다";
System.out.println("h : " + h); // h : jun15.Human@515f550a
System.out.println("array[0] : " + arr01[0]); // array[0] : jun15.Human@515f550a
System.out.println("array[1] : " + arr01[1]); // array[1] : 1000
System.out.println("array[2] : " + arr01[2]); // array[2] : 이것도 됩니다
// 캐스트
// int number = arr01[1];
// int != 배열 --> 배열 선언할때 int가 아니라 Oject로 선언__ String??
int number = (int) arr01[1];
System.out.println(number); // 1000
String str = (String) arr01[2];
System.out.println(str); // 이것도 됩니다
Human h2 = arr01[0];
Human h2 = (Human) arr01[0];
}
}
* Object는 최상위타입 -> 모든 데이터타입(배열도)으로 형변환가능
'국비과정 > JAVA' 카테고리의 다른 글
20230615 _[10일차]_04. Arguments & 메소드 특징 & 활용 (0) | 2023.06.18 |
---|---|
20230615 _[10일차]_03. 객체 지향 특징 & 활용 (0) | 2023.06.18 |
20230615 _[10일차]_02. 객체 생성 연습 (인스턴스) (0) | 2023.06.17 |
20230614 _[9일차]_04. 로또번호추첨_(여러개의 클래스) (0) | 2023.06.15 |
20230614 _[9일차]_03. 객체2 (0) | 2023.06.15 |