JAVA/요약

6장 변경자.

gandus 2010. 10. 11. 13:57

o  default 변경자

§  클래스 접근을 동일 패키지에 한정하려고 사용

§  동일 패키지에 있는 모든 클래스에 접근할 수 있는 접근 권한을 제공

§  사용법

      아무런 변경자도 적지 않는다.

 

 

o  public 변경자

§  패키지 외부에서도 접근할 수 있도록 클래스를 개방하는 것

§  선언된 클래스나 필드, 메소드는 자유롭게 접근이 용이

      패키지, 외부 모두 접근 가능

§  캡슐화를 해치지 않는지 고려해야 함

 

 

o  protected 변경자

§  private, default, public 등 세 가지 변경자를 혼합한 성격

§  패키지 외부 클래스에서 접근하는 것은 차단

§  패키지 내부 클래스에서 접근하는 것은 허용

§  상속관계에서 접근하는 것은 허용


 


o
 
private 변경자

§  클래스의 필드나 메소드에서 외부 클래스의 접근을 차단하는 기능을 제공

§  클래스 내부 메소드를 제외하고는 접근을 허락하지 않음

§  private로 선언된 메소드 또한 클래스 내부 메소드만 호출 가능


Static
접근자를 이용한 활용법.

 

    • 필드나 메소드의 속성을 변경
    • 고정된 메모리 공간이 할당
            static 영역이 별도의 공유 영역에서 관리
    • 인스턴스를 생성하지 않고 클래스명만 이용해 호출
    • static 메소드에서는 인스턴스 변수에 접근할 수 없다
            ) main 메소드는 static으로 선언되어 있기 때문 
                 동일 클래스에 있는 멤버변수라도 접근할 수 없다
    • static 변경자 사용할 시 유의사항
            필드에 static 변경자를 붙일 때
            –      해당 필드가 클래스의 인스턴스와 공유하는 필드인지 확인

           
      메소드에 static을 붙일 때 
           -
            해당 메소드에서 인스턴스 변수에 접근하지 않는지 확인



Static 매소드를 이용한 예제

package javabook.ch06;

class MathEx {

    ( static ) double PI = 3.14;

    static int abs(int nNum) {

        if(nNum < 0)

        nNum = nNum * -1;

        return nNum;

    }

    double abs(double dNum) {

        if(dNum < 0)

        dNum = dNum * -1.0;

        return dNum;

    }

}

 

public class Extra6_1 {

    public static void main(String[ ] args) {

        MathEx math = new MathEx( );

        System.out.println(( MathEx ).abs(-10));         // Static 이라서 클래스 이름으로 직접접근 가능

        System.out.println(( math ).abs(-23.5));         // 인스턴스 변수라 객체 생성후 접근

        System.out.println(MathEx.PI);

    }

} 



Final 변경자

 
§클래스나 필드, 메소드 등에 적용해 사용을 제한
§클래스에 적용 시
상속이 불가능 해짐
이점 : 하위 클래스가 없음을 명시적으로 표현할 수 있음
§메소드에 적용 시
하위 클래스에서 오버라이딩할 수 없음
이점 : 하위 클래스에서 특정 메소드의 기능을 바꿀 수 없도록 할 수 있음
§필드에  적용 시
상수형 변수처럼 변경할 수 없는 필드를 만듬
이점 : 클래스에 있는 메소드 간에 일관적으로 변수의 값을 유지할 수 있음

  매개변수를 전달할 시, 실수로 전달받은 변수값을 바꾸는 오류를 최소화