본문 바로가기

JAVA

[6] 접근 제한

728x90

클래스 외부에서 멤버에 함부로 접근할 수 없게 만들고 싶을 대는 private 제한자를 사용합니다.

이 경우 같은 클래스 public 멤버를 통해서만 접근할 수 있습니다.

 

이렇게 한 곳에 모아놓고 멤버를 보호하는 것을 캡슐화라고 합니다.

상속, 다형성, 캡슐화는 클래스의 큰 특징이자 장점입니다.

 

메소드는 이름이 같아도 인수 타입과 개수가 다르다면 같은 이름의 메소드를 여러개 정의할 수 있습니다.

이렇게 정의된 메소드는 타입과 개수가 맞는 메소드가 자동으로 실행됩니다.

이렇게 하나의 이름이 상황에 따라 다른 기능을 하는 성질을 다형성이라고 합니다.

 

생성자

객체가 생성될 때 자동으로 실행되는 메소드로 보통 초기화할 때 사용합니다.

필드에 값을 대입하지 않아도 기본값이 타입에 따라 정의되어 있습니다.

 

생성자 오버로딩

생성자도 타입과 개수가 다르다면 오버로드를 할 수 있습니다.

 

this( )

this( )를 생성자 안에 사용할 수 있는 함수로 가장 처음 나와야 합니다.

이 함수가 실행되면, 클래스의 인수 없는 생성자가 호출되므로 생성자 오버로딩을 할 때 this( )이외의 부분만 작성하면 됩니다.

만약, 인수 없는 생성자가 아닌 다른 생성자를 호출하고 싶다면 this(2, 5)같은 식으로 타입과 개수를 맞춰 작성하면 됩니다.

 

기본 생성자

생성자를 작성하지 않았다면, 인수 없는 생성자인 기본 생성자가 호출됩니다.

 

생성자 제한하기

객체를 생성할 때 사용하고 싶지 않은 생성자에 private을 붙일 경우 해당 생성자를 통해 객체 생성이 불가능 합니다.

만약, 아래와 같이 생성자를 선언한 경우

해당 생성자 형태로 객체를 생성할 수 없습니다.

아래와 같이 다른 생성자를 통해서는 생성할 수 있습니다.

위에서 보다시피 아무것도 없는 생성자로 객체를 생성하는 것을 막을 수 있어 제작자가 의도하는 대로 객체를 생성하기가 쉬워졌습니다.

 

클래스 변수와 클래스 메소드

지금까지의 필드와 메소드는 각 객체를 생성하면서 그 객체의 고유한 멤버가 되었습니다. 이것을 "클래스 00에 연결되었다"고 하며, 객체에 연결된 멤버를 각각 인스턴스 변수, 인스턴스 메소드라고 합니다. 하지만 모든 객체들이 공유할 수 있는 필드와 메소드를 만들 수 있습니다. 이것을 "클래스 전체에 연결되었다"고 합니다.

 

클래스 변수와 클래스 메소드를 사용하기 위해서는 static이라는 제한자를 붙입니다.

객체가 생성되면서 num을 1 증가시켰고, 호출된 클래스 메소드가 클래스 변수를 출력했습니다.

이처럼 클래스 변수는 객체 전체와 공유된 변수로, 개수를 카운트하기에 좋고, 클래스 메소드는 객체를 생성하지 않아도 호출할 수 있습니다.

 

this와 클래스 메소드의 관계

객체와 연결되어 있는 this는 인스턴스 메소드(생성된 객체의 메소드)에서만 사용할 수 있습니다. 다시말해, 클래스 메소드 안에서는 this를 사용할 수 없습니다. 클래스 메소드는 객체가 생성되지 않아도 호출될 수 있기 때문에 인스턴스 변수나 인스턴스 메소드에 접근할 수 없는 것입니다.

728x90

'JAVA' 카테고리의 다른 글

[8] 상속  (0) 2021.05.21
[7] 클래스 형 변수  (0) 2021.05.21
[5] 클래스  (0) 2021.05.17
[4] 배열  (0) 2021.05.17
[3] 입력  (0) 2021.05.11