반응형
# private 생성자
## private 생성자 메서드 (Constructor)
- 객체생성에 관여하는 생성자 메서드가 private 접근제어를 가지면 객체를 생성할 수 없다는 뜻이 됨.
- 그러므로 객체를 생성하지 않고도 사용가능해야 된다. (모든 클래스의 멤버가 static 멤버가 되어야 한다.)
public class BookDTO {
private BookDTO(){
}
// 인스턴스 메서드 (static 키워드가 붙어있지 않는 메서드)
public void tpc() {
System.out.println("TPC 강의");
}
// 클래스 메서드 (static 키워드가 붙은 메서드를 의미)
public static void java() {
System.out.println("JAVA 강의");
}
}
=>
어떤 객체에 생성자 메서드가 private이면 모든 멤버는 static이 붙은 멤버가 되어야 함.
### static 멤버 접근방법
클래스이름.클래스메서드 (static 메서드)
### 인스턴스 메서드 (non-static 멤버인 경우)
- 객체 생성 후 접근 가능.
BookDTO book = new BookDTO(); // 생성자가 public인 경우.
book.tpc();
=>
생성자가 private인 경우 BookDTO book = new BookDTO(); 불가하므로. tpc() 메서드 접근 불가.
### 클래스 메서드 (static 멤버인 경우)
- 객체 생성 없이 접근 가능 (클래스 이름으로 접근)
BookDTO.java();
=>
클래스를 사용하는 시점에서 static 멤버는 먼저 자동으로 메모리에 로딩된다.
그 이후 호출이 됨.
- 자주 사용하는 객체, 동작은 static 멤버로 만들어서 사용한다.
## private 생성자 메서드(실습)
### 클래스 메서드와 인스턴스 메서드 존재 시 접근
package kr.tpc;
public class Inflearn {
// 인스턴스 메서드
public void tpc() {
System.out.println("TPC 재밌음.");
}
// 클래스 메서드
public static void java() {
System.out.println("JAVA 재밌음.");
}
}
import kr.tpc.Inflearn;
public class TPC13 {
public static void main(String[] args) {
Inflearn inf = new Inflearn();
inf.tpc(); // 인스턴스 메서드는 인스턴스 생성 후 접근해야 해서 번거로움.
//inf.java();
Inflearn.java(); // 클래스메서드는 new 사용하지 않고 클래스명으로 바로 접근 가능.
}
}
### 클래스 메서드만 존재 시 접근
package kr.tpc;
public class Inflearn {
// 클래스 메서드
public static void tpc() {
System.out.println("TPC 재밌음.");
}
// 클래스 메서드
public static void java() {
System.out.println("JAVA 재밌음.");
}
}
import kr.tpc.Inflearn;
public class TPC13 {
public static void main(String[] args) {
/*
* Inflearn inf = new Inflearn(); inf.tpc(); // 인스턴스 메서드는 인스턴스 생성 후 접근해야 해서
* 번거로움. //inf.java();
*/
Inflearn.java(); // 클래스메서드는 new 사용하지 않고 클래스명으로 바로 접근 가능.
Inflearn.tpc();
}
}
- 이때 객체 생성은 필요하지 않으므로 생성자를 private로 해주면 생성자 메서드 호출 불가.
package kr.tpc;
public class Inflearn {
private Inflearn() {
}
// 클래스 메서드
public static void tpc() {
System.out.println("TPC 재밌음.");
}
// 클래스 메서드
public static void java() {
System.out.println("JAVA 재밌음.");
}
}
import kr.tpc.Inflearn;
public class TPC13 {
public static void main(String[] args) {
/*
* Inflearn inf = new Inflearn(); inf.tpc(); // 인스턴스 메서드는 인스턴스 생성 후 접근해야 해서
* 번거로움. //inf.java();
*/
// Inflearn inf = new Inflearn(); // private라 생성자 호출 불가.
Inflearn.java(); // 클래스메서드는 new 사용하지 않고 클래스명으로 바로 접근 가능.
Inflearn.tpc();
}
}
### 자바 API 생성자 private
import kr.tpc.Inflearn;
public class TPC13 {
public static void main(String[] args) {
// Java API 생성자 private
// 1. System
// System system = new System();
System.out.println();
// 2. Math
// Math m = new Math();
int v = Math.max(10, 20);
}
}
# class, object, instance 상호관계
- 객체 생성과정
BookDTO book = new BookDTO(); // new 연산자와 생성자 메서드 호출
=>
객체 : 여기서 book은 객체, 변수.
인스턴스 변수 : book라는 객체가 구체적인 대상체(실체)를 가리킬 때 인스턴스 변수라고 함.
인스턴스가 만들어져야 데이터를 넣고, 빼는게 가능해짐.
그래서 객체 생성 과정을 인스턴스를 만드는 과정이라고 할 수 있음.
DTO : Data Transfer Object
VO : Value Object
- 현실세계의 객체(책)가 존재한다고 할 때.. 책을 모델링(설계도, 클래스)을 통해 설계.
// 클래스 = 모델링 하는 도구. (클래스로 만든 새로운 자료형 = 바구니 = 이동)
public class BookDTO {
public String title;
public int price;
public String company;
public int page;
public BookDTO() {
super();
}
}
- 이때 객체를 만들고 어떻게하면 기억공간을 효율적으로 사용할지 고민 필요.
## class, object, instance 상호관계(실습)
package kr.tpc;
public class BookDTO {
public String title;
public int price;
public String company;
public int page;
// 디폴트 생성자 메서드(생략)
public BookDTO() {
// 객체를 생성하는 작업을 한다.(기계어 코드)
super();
}
public BookDTO(String title, int price, String company, int page) {
this.title = title;
this.price = price;
this.company = company;
this.page = page;
}
}
import kr.tpc.BookDTO;
public class TPC14 {
public static void main(String[] args) {
// 1. 책 이라는 자료를 사용하기위해 클래스로 class(BookDTO) 책구조 설계.
// 2. 설계한 클래스를 이용 객체, 인스턴스를 만드는 과정 필요.
// 아래는 책이 아닌 책에 대한 내용들을 4개의 변수(개별적인 기억공간)에 책에 대한 정보가 존재하는것 뿐.
String title = "스프링";
int price = 30000;
String company = "길";
int page = 300;
// 설계 -> 클래스를 이용하여 설계.(DTO or VO)
// 위와같은 4개의 데이터를 하나의 구조(여러 기억공간이 묶여있는)에 담기 위해서는 해당 구조를 직접 설계하는게 필요.
BookDTO dto; // dto(Object : 객체)
//dto = new BookDTO(); // dto(Instance : 인스턴스 -> 실체를 가리킴.)
//담는방법 1.
/*
dto.title = title;
dto.price = price;
dto.company = company;
dto.page = page;
*/
// 담는방법 2. 생성자 이용.
dto = new BookDTO(title, price, company, page);
// 이동.
bookPrint(dto);
}
public static void bookPrint(BookDTO dto) {
System.out.println(dto.title);
System.out.println(dto.price);
System.out.println(dto.company);
System.out.println(dto.page);
}
}
반응형
'인프런 강의 학습 > Java TPC' 카테고리의 다른 글
Java TPC_10일차 메서드 오버로딩 / 동일한 구조와 이질적인 구조 (0) | 2022.01.12 |
---|---|
Java TPC_9일차 정보은닉 / 잘 설계된 클래스 (0) | 2022.01.10 |
Java TPC_7일차 기본 자료형(PDT), 사용자 정의 자료형(UDDT), 객체 생성과정 (0) | 2022.01.08 |
Java TPC_6일차 메서드의 매개변수 전달기법(parameter passing) / JVM의 메모리 모델 (0) | 2022.01.06 |
Java TPC_5일차 변수와 메서드(method) (0) | 2022.01.05 |