본문 바로가기
자바 Java

수식자 / 접근제어자 public, private 차이 / static, final 수식자

by MEHAVING 2019. 9. 26.
반응형

수식자

'public', 'static'같이 클래스나 메서드, 필드 등에 대해 효과나 제약을 부여하는 수단

 

수식자의 종류 중

접근제어자

클래스나 메서드, 필드 등에 대해 어떤 범위에서 접근을 허가할지를 지정

 

 

왜해?

객체가 가진 고유의 멤버 변수값들이 외부에서 잘못 변경되는 것을 막기 위해서

 

public class Date {
	public static void main(String[] args) {
    	//ClassNew 클래스에 대한 객체 object를 생성
		ClassNew object = new ClassNew(); 
        
        // ClassNew 클래스를 가진 객체의 멤버변수에 접근 , private 접근 제한자 때문에 접근 불가
        System.out.println(object.one); 
        // ClassNew 클래스를 가진 객체의 멤버함수에 접근, public 접근 제한자니 접근 가능
        System.out.println(object.getone());
	}
}

class ClassNew{
	private String one;
    public String getone(){
    	one = "one";
        return one;
    }
}

 

접근 허용하는 정도

public > protected > default > private

 

l  public : 접근 제한이 없음

l  protected : 동일한 패키지 내에 존재하거나 상속받은 하위 클래스에서 사용할 수 있도록 지정하는 것, 상위 클래스에서 작성한 변수나 메서드 중 외부 클래스에서 사용할 수 없음

 

HousePark.java

package jump2java.house;

public class HousePark {
    protected String lastname = "park";
}

EungYongPark.java

package jump2java.house.person;

import house.HousePark;

public class EungYongPark extends HousePark {       
    public static void main(String[] args) {
        EungYongPark eyp = new EungYongPark();
        System.out.println(eyp.lastname);       
    }    
}

HousePark클래스를 상속받은(import) EungYongPark이라는 클래스의 패키지는 jump2java.house.person으로 HousePark의 패키지인 jump2java.house와 다르지만 HousePark의 lastname 변수가 protected로 설정되었기 때문에 eyp.lastname과 같은 접근이 가능하다.

변수가 protected로 설정된 클래스를 import 받았다면 패키지가 달라도 사용 가능하다

만약 lastname의 접근제어자가 protected 가 아닌 default 접근제어자였다면 eyp.lastname 문장은 컴파일 에러를 유발 할 것이다.

 

l  default : 아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근이 가능

l  private : 자기 자신의 클래스 (private 변수가 선언된 클래스) 내에서만 접근이 가능

 

 

static 수식자

개념

"공유"의 의미를 담는 키워드

클래스가 인스턴스화되어 있지 않더라도(객체가 없더라도?...) 접근 가능하다는 표시

 

사용

static 필드 - 클래스 변수

메서드 또는 필드(클래스내부의 변수)에 지정할 수 있다.

 

 

클래스 변수 : 여러 객체들이 객체 밖에서도 공유하는 변수 ex) static int count = 0; 

인스턴스 변수 : 객체 각각에서만 쓸 수 있는 객체 내부의 변수

 

 

유틸리티 메소드 = Static 메소드

객체의 생성 없이 사용가능한 메소드 ex) static void m1(){ }

 

ex) Math.random(); 이미 생성되있는 객체의 메소드

 

https://youtu.be/HOVuJXJXKF4

 

 

 

final 수식자

멤버의 변경을 금지한다. 상수화.

오버라이드 금지 : 지정한 클래스를 계승하여 서브클래스를 만드는 것을 금지한다.

 

필드에 지정 → 필드의 값이 변경되는 것을 금지

메서드에 지정 → 서브 클래스에서 메서드 변경을 금지

클래스에 지정 → 클래스의 서브 클래스화를 금지

 

 

반응형

'자바 Java' 카테고리의 다른 글

클래스와 객체 ( 배열 변수 / 객체 배열 / 접근 제어자 )  (0) 2019.09.29
예외처리 try, catch  (0) 2019.09.26
Static 키워드  (0) 2019.09.25
출력  (0) 2019.09.23
배열  (0) 2019.09.23

댓글