💡생성자란?

역할 : 객체를 처음 생산할 때 필드(클래스 내 속성(attribute) )를 초기화하는 역할을 수행하며 객체를 생성하기 위해 생성자로 호출하는 것이다. 즉 인스턴스 초기화 메서드 역할을 한다 

 

기본 생성자란   컴파일러가 제공하는 기본 생성자로 매개변수가 없는 생성자로 생성자를 직접 프로그래머가 만들지 않으면, 컴파일할 때 자동으로 매개변수가 없는 형태로 만들어진 생성자를 말한다

클래스이름 () { }
  Card() { }

 

new 연산자란

Card c = new Card () ;

인스턴스를 new연산자로 생성하고 Card() 라는 생성자를 통해 인스턴스 변수들을 초기화한다.

 

 

기존 ver.

package foundation;

public class Card2 {
	String type;
	String color;
	int cvc;
	
	//2. 카드의 타입알아내는 메서드 생성
	public void setCard (String type, String color, int cvc) {
		this.type = type;
		this.color = color;
		this.cvc = cvc; 
	}	
	
	public static void main(String[] args) { //구현하는 메서드
		Card2 c = new Card2(); // 생성자 선언 및 초기화
		
		//카드의 타입이 알고싶다
		//1. 인스턴스 변수.카드의 타입을 알아내는 메서드("타입명"); 
		c.type = "credit";
		c.color ="orange";
		c.cvc = 456; 
		
		
		System.out.println("[ 카드 타입 : " + c.type + " 카드 색깔 : " + c.color + " 카드 cvc : " + c.cvc + " ]");
		
	}

}

 

매개변수를 지닌 생성자 : 코드가 축약된다

package foundation;

public class Card {
	String type; //인스턴스 변수
	String color;
	int cvc;
	
	//2. 카드의 타입알아내는 메서드 생성
	Card(String type, String color, int cvc) { //매개변수
		this.type = type; // 지역변수(매개변수)
		this.color = color;
		this.cvc = cvc;
	}
	
	public static void main(String[] args) { //구현하는 메서드
	//매개변수가 있는 생성자로 만들기
		Card c = new Card("credit","orange",456);
		
		System.out.println("[ 카드 타입 : " + c.type + " 카드 색깔 : " + c.color + " 카드 cvc : " + c.cvc + " ]");
		
	}

}

코드가 축약된다

📌 접근 제한자 

접근 제한자(Access Modifier)란 말 그대로 접근을 제한하기 위해 사용되며 여기서 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말한다. 클래스와 인터페이스를 다른 패키지에서 생성자를 호출하거나 생성자를 생성하지 못하도록 막는 기능이라고 보면 된다

 

 

접근 제한자 종류

  • public :  외부 클래스도 자유롭게 생성자 호출 및 생성가능 
  • default : 같은 패키지(폴더) 내에서만 생성자 호출 및 생성 가능
  • protected : 같은 패키지 또는 자식 클래스(상속관계의 객체)에서만 생성자 호출 및 생성가능
  • private : 오로지 클래스 내부에서만 생성자 호출 및 생성가능. 외부에서 사용될 수 없는 클래스 (현재 객체내에서만 사용 가능)

 

접근제한 예시

 

default

class 클래스 {...}

클래스를 선언할 때 public을 생략했다면 클래스는 default 접근 제한을 가진다. 클래스가 default 접근 제한을 가지면 같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없도록 제한이 된다.

 

public

public class 클래스 {...}

 

 클래스가 default 접근 제한을 가지면 기본 생성자도 default 접근 제한을 가지고, 클래스가 public 접근 제한을 가지면 기본 생성자도 public 접근 제한을 가진다.

 

 

은닉화 ,캡슐화 차이 

 

둘다 같은 private 접근제한자를 쓰지만 은닉화는 외부에서 아예 접근이 불가능하게 한 것이며 캡슐화는 은닉화를 전제로 하되 내부적인 접근은 불가능하지만 외부에서는 접근 가능한 기능이다 

 

은닉화 

private String name;
private int age;

캡슐화 

//getter , setter를 통해 외부에서 데이터를 쓸 수 있게 만듦
	public String getName() {
	return name;
}
	public void setName(String name) {
	this.name = name;
}

이렇게 하면 데이터는 외부로 유출되지 않는 반면 메서드를 통해 외부에서 name이라는 인스턴스 변수를 사용할 수 있게 된다 

Setter : 외부에서 메소드를 통해 데이터에 접근하도록 유도한다.

Getter : 외부에서 객체의 데이터를 읽을 때 사용, 메소드로 필드값을 가공 후, 외부로 전달

 

만약 필드 타입이 boolean일 경우, Getter는 get으로 시작하지 않고 is 로 시작하는 것이 관례이다.

 

외부에서 필드값을 읽을 수만 있고, 변경하지 못하도록 하려면(읽기 전용) Getter 메소드만 선언하거나, Setter 메소드를 private 접근 제한을 갖도록 선언한다.

 

this. 의 경우에는 객체 내부의 인스턴스 변수에 접근하기 위해 사용되는데 메서드나 생성자나 메소드의 매개변수이름이 인스턴스 변수 이름과 겹칠때 사용한다.

 

cf ) this() 는 같은 클래스내 다른 인스턴스 변수를 호출할 때 사용한다.

복사했습니다!