반응형

# 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);
	}
}
반응형

+ Recent posts