반응형
자바는 "프로토타입클래스" 이다
프로토타입클래스란?
객체가 수십개 있어도 메모리에는 딱 한개만 만들어지는 것
메모리 절약 가능하다!
ex) Member클래스
1. Member 클래스
oop > Member.java
package oop;
//회원정보(아이디,이름,이메일)를 저장하기 위한 클래스 (VO클래스)
public class Member {
private String id="NoId";
private String name="NoName";
private String email="NoEmail";
public Member() {
this("NoId","NoName","NoEmail");
}
public Member(String id) {
this.id=id;
}
public Member(String id, String name) {
super();
this.id = id;
this.name = name;
}
public Member(String id, String name, String email) {
super();
this.id = id;
this.name = name;
this.email = email;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
//필드값을 출력하는 메소드
public void display() {
System.out.println("아이디 = "+id);
System.out.println("이름 = "+name);
System.out.println("이메일 = "+email);
}
}
2. Member클래스 실행 프로그램
oop > MemberApp.java
package oop;
// 소스코드를 저장하면 자바컴파일러가 이진코드(ByteCode)가 저장된 클래스 파일을 생성함
//소스코드를 실행하면 JVM이 'java MemberApp' 명령어를 사용하여 MemberApp클래스를 불러들임
//1. static에 MemberApp메모리를 로드함 -> 그 안에 메인메소드가 들어있음
public class MemberApp {
//2. MemberApp클래스의 main메소드가 자동 호출됨
public static void main(String[] args) {
//3. 제일 먼저 클래스로더가 Member를 읽고,
//static에 Member클래스(생성자1,생성자2,diplay메소드,상수,static필드 ..)를 로더함
//4. new연산자가 Heap에 새주머니 생성하고,
//생성자2를 호출해 Heap에 멤버객체(Member클래스 이름, 객체의 필드값들 초기화)를 만듦
//=> Member클래스 이름으로 static에 있는 Member클래스 참조가능
//5. stack영역에 main메소드 내 m1참조변수 생성 후,
//m1참조변수 안에 참조할 메모리주소 저장함
Member m1=new Member("abc","홍길동","abc@itwill.xyz"));
//6. Member클래스가 로드되어있는가? 네, 또 만들 필요없어요 패스하세요.
//7. new연산자가 Heap에 새주머니 생성하고
//생성자2를 호출해 Heap에 Member클래스 이름과 필드의 초깃값들 저장함
//8. main메소드 내 m2참조변수 생성해 위의 객체의 메모리주소 저장
Member m2=new Member("xyz","임꺽정","xyz@itwill.xyz"));
//9. m1.display메소드호출 시 , main메소드 대기상태로 변경
m1.diplay();
//new 연산자로 클래스의 매개변수가 없는 기본 생성자를 사용하여 객체 생성
// => 생성된 객체의 필드는 기본값으로 자동 초기화
// => new 연산자로 호출한 생성자가 없는 경우 객체 생성이 불가능하여 에러 발생
Member member1=new Member();
//Getter 메소드를 호출하여 필드값을 반환받아 출력
System.out.println("아이디 = "+member1.getId());
System.out.println("이름 = "+member1.getName());
System.out.println("이메일 = "+member1.getEmail());
//Setter 메소드를 호출하여 매개변수의 전달값으로 객체의 필드값 변경
member1.setId("aaa");
member1.setName("홍길동");
member1.setEmail("hgd@google.com");
/*
System.out.println("아이디 = "+member1.getId());
System.out.println("이름 = "+member1.getName());
System.out.println("이메일 = "+member1.getEmail());
*/
member1.display();
Member member2=new Member("bbb");
member2.display();
Member member3=new Member("ccc", "임꺽정");
member3.display();
Member member4=new Member("ddd", "전우치", "chon@itwill.xyz");
member4.display();
//10. m1.display메소드종료
//11. m2.display메소드호출
m2.display();
//12. m2.display메소드종료
}
}
반응형
'java > oop' 카테고리의 다른 글
[oop] 10. static(정적) 멤버 VS instance(인스턴스) 멤버 (2) | 2024.04.18 |
---|---|
[oop] 9. 자바의 API 문서 보는 법 (0) | 2024.04.17 |
[oop] 7. VO(Value Object)클래스 (0) | 2024.04.16 |
[oop] 6. this 키워드의 개념 (0) | 2024.04.16 |
[oop] 5. 생성자(Constructor)의 개념 (0) | 2024.04.15 |