Back-end/Java

접근 제어 지시자 & this

메델 2022. 9. 12. 06:14

1. 접근 제어 지시자 (access modifier)

클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드

자바에서는 4가지의 접근 지정자가 있음 (private, protected, public, 접근 지정자 생략(디폴드 접근 지정)

 

private 

private 접근 지정자는 비공개를 지시하는 것

같은 클래스 내에서만 접근 가능 ( 외부 클래스, 상속 관계의 클래스에서도 접근 불가)

 

public

모든 클래스들이 접근 가능

 

protected

(1) 같은 패키지의 모든 클래스에 접근이 허용

(2) 다른 패키지에 있더라도 자식 클래스의 경우 접근 허용 

 

default

접근 지정자가 생략된 멤버  = 디폴트 멤버

동일한 패키지 내에 있는 클래스들만 디폴트 멤버를 자유롭게 접근 가능 

 

2.  get()/set() 메서드

private으로 선언된 멤버 변수(필드)에 대한 접근, 수정할 수 있는 메서드를 public으로 제공 

이클립스에서 자동 생성

get() 메서드만 제공되는 경우 read-only 필드

3.  this

객체 자신에 대한 레퍼런스 = 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스 

- 인스턴스 자신의 메모리를 가르킴

- 생성자에서 또 다른 생성자를 호출

- 자신의 주소(참조값을 반환) 

 

(1) 생성된 인스턴스 메모리의 주소를 가짐

: 클래스 내에서 참조변수가 가지는 주소값과 동일한 주소값을 가진다. 

(2) 생성자에서 다른 생성자를 호출하는 this()

클래스에 생성자가 여러 개인경우, this를 이용하여 생성자와 다른 생성자를 호출할 수 있다. 

- this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용

- 생성자에서 다른 생성자를 호출하는 경우에는 인스턴스의 생성이 완전하지 않은 상태에서 this()  statement 이전에 다른     statement를 쓸 수 없다.

- this()는 반드시 생성자의 첫 번째 문장이 되어야한다. 

	public Book() {
		System.out.println("생성자가 호출됨");
		this("","");//this()는 생성자의 첫 번째 문장이어야 하므로 컴파일 오류가 일어남
	}

- this()는 반드시 생성자 코드에서만 호출 가능 

 

public class Person {
	String name;
	int age;
	
	public Person() {
		this("no name", 1); //생성자의 역할은 인스턴스 초기화 
	}
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
		
	}
	public void showPerson() {
		System.out.println(name+","+ age);
	}
	
	public Person getPerson() {
		return this;
	}
	
	
	
	public static void main(String[] args) {
		Person person = new Person();
		person.showPerson();
		
		
		System.out.println(person);
		
		Person person2 = person.getPerson();
		System.out.println(person2);
	}

}

(참고: fastcampus 한 번에 끝내는 Java/Spring 웹 개발 마스터)

'Back-end > Java' 카테고리의 다른 글

자바 기초 정리  (0) 2023.01.30
static 변수  (0) 2022.09.26
생성자  (0) 2022.09.09
인스턴스 & 동적 메모리  (1) 2022.09.08