접근 제어자, 참조 변수 this, 생성자 this( )

kmb·2022년 1월 19일
0

자바

목록 보기
9/31
post-thumbnail

접근 제어자

외부에서 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나, 객체의 특정 데이터를 보호하기 위해 해당 필드(field)에 접근하지 못하도록 막는것.

 

  • 접근 제어자 종류

1) public : 다른 패키지에 접근 가능 .

2) protected : 동일한 패키지 혹은 다른 패키지의 클래스가 해당 클래스의 자식 클래스일 경우에 접근가능. (이때 자식클래스 내에서 부모클래스의 인스턴스 변수로 접근 할 수는 없다)

3) default : 동일한 패키지에서만 접근 가능. (클래스를 선언할 때 접근 제어자가 없다면 자동으로 default 접근 제한을 가진다)

4) private : 동일한 클래스에서만 접근 가능.

 

  • 생성자의 접근 제한

클래스에 생성자를 선언하지 않으면 컴파일러에 의해 자동적으로 기본 생성자가 추가된다. 클래스가 갖는 접근 제한에 따라서 기본 생성자도 똑같은 접근 제한을 갖는다.

public class 클래스이름 {
	// public 접근 제한
    public 클래스이름(...)  {...}
    
    // protected 접근 제한
    protected 클래스이름(...)  {...}
    
    // default 접근 제한
    클래스이름(...)  {...}
    
    // private 접근 제한
    private 클래스이름(...)  {...}
}

 

  • 필드와 메서드의 접근 제한

필드와 메서드를 클래스 내부에서만 사용할 것인지, 동일 패키지 내에서 사용할 것인지, 다른 패키지에서도 사용할 수 있도록 할 것인지에 대하여 접근 제한을 걸어서 결정.

// 필드 접근 제한 선언
[ public | protected | private ] [static] 타입 필드이름;

// 메서드 접근 제한 선언
[ public | protected | private ] [static] 리턴타입 메서드이름(...)  {...}

 


참조 변수 this

자기 자신의 heap 공간을 가르키는 참조변수.

 

  • 참조 변수 this 특징
  1. 인스턴스 메서드와 생성자에서 사용 가능.
  2. 인스턴스 변수와 지역변수를 구분하기 위해 사용.
  3. 같은 클래스 안에서는 this 생략 가능.

 

  • 참조 변수 this 예시
void setColor(String color) {
	this.color = color;
}

// 인스턴스 변수와 지역변수 구분
Car(String color, int size) {
    this.color = c;
	this.size = s;
}

// this 생략
Car(String c, int s) {
    color = c;
	size = s;
}

 


생성자 this( )

생성자내에서 다른 생성자를 호출 할 때 사용한다.

다른 생성자를 호출시 반드시 첫 줄에서만 사용해야 한다. (첫 줄을 제외한 다른 줄에서는 에러 발생)

 

  • 생성자 this( ) 선언
클래스 (매개변수 선언, ...) {
	this(매개변수, ... ,, ...);
    실행문;
}

 

  • 생성자 this( ) 예시
1. 생성자 간 중복된 코드가 많은 문제가 발생
public class Car {

	String company = "현대자동차";
	String model;
	String color;
	int maxSpeed;
	
	Car() {
		
	}
	
	Car(String model) {
		this.model = model;
		this.color = "은색";
		this.maxSpeed = 250;
	}
	
	Car(String model, String color) {
		this.model = model;
		this.color = color;
		this.maxSpeed = 250;
	}
	
	Car(String model, String color, int maxSpeed) {
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
	
}

2. 생성자 this( )를 활용하여 중복된 코드를 줄여서 개선
public class Car {
	
    String company = "현대자동차";
	String model;
	String color;
	int maxSpeed;
	
	Car() {
		
	}
	
	Car(String model) {
		this(model, "은색", 250);
	}
	
	Car(String model, String color) {
		this(model, color, 250);
	}
	
	Car(String model, String color, int maxSpeed) {
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
}

public class CarExample {

	public static void main(String[] args) {
		
		Car car1 = new Car("소나타");
		showField(car1);
		
		Car car2 = new Car("그랜저", "빨간색");
		showField(car2);

	}
	
	static void showField(Car myCar) {
		System.out.println("myCar.company = " + myCar.company);
		System.out.println("myCar.model = " + myCar.model);
		System.out.println("myCar.color = " + myCar.color);
		System.out.println("myCar.maxSpeed = " + myCar.maxSpeed);
		System.out.println("======================================================");
	}
}

 

출처

  • 이지업 컨텐츠 내의 데어프로그래밍 자바강의
  • 이것이 자바다 (책)
profile
꾸준하게

0개의 댓글