Android/JAVA 기본문법

접근 제어자.

gandus 2010. 5. 12. 17:07

 Static - 클래스의, 공통적인
static은 '클래스의' 또는 '공통적인'의 의미를 가지고 있다.
인스턴스변수는 하나의 클래스로부터 생성되었다 하더라도 각각 다른 값을 유지하지만,
클래스변수(static멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다.


그 이유는 단 하나의 변수를 모든 인스턴스가 공유하기 때문이다.

그리고, static이 붙은 멤버변수와 메서드, 그리고 초기화블럭은 인스턴스가 아닌 클래스에 관계된 것이기 때문에 인스턴스를 생성하지 않고도 사용할 수 있다.

인스턴스메서드와 static메서드의 근본적인 차이는 메서드 내에서 인스턴스 멤버를 사용하는가의 여부에 있다.


static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화블럭








  final  
 -  마지막의, 변경될 수 없는

final은 '마지막의' 또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다.
변수에 사용되면 값을 변경할 수 없는 상수가 되며,
메서드에 사용되면 오버라이딩을 할 수 없게 되고 클래스에 사용되면 자신을 확장하는 자손클래스를 정의하지 못하게 된다.


final이 사용될 수 있는 곳 - 클래스, 메서드, 멤버변수, 지역변수






4.4 생성자를 이용한 final 멤버변수 초기화.


final이 붙은 멤버 변수는 상수이므로 일반적으로 선언과 초기화를 동시에 하지만,
멤버변수의 경우 생성자에서 초기화 되도록 할 수 있다.
클래스 내에 매개변수를 갖는 생성자를 선언하여,

인스턴스를 생성할 때 final이 붙은 멤버변수를 초기화하는데 필요한

값을 생성자의 매개변수로부터 제공받는 것이다.
이 기능을 활용하면 각 인스턴스마다 final이 붙은 멤버변수가

다른 값을 갖도록 하는 것이 가능하다.
만일 이것이 불가능하다면, 클래스에 선언된 final이 붙은
멤버변수는 모든 인스턴스에서 같은 값을 가져야만 할 것이다.

예를 들어 카드의 경우, 각 카드마다 다른 종류와 숫자를 갖지만,

일단 카드가 생성되면 카드의 값이 변경되어서는 안 된다. 52장의 카드 중에서 하나만 잘못 바꿔도 같은 카드가 2장이 되는 일이 생기기 때문이다. 그래서 카드의 값을 바꾸기 보다는 카드의 순서를 바꾸는 쪽이 더 안전한 방법이다.

예제7-11] FinalCardTest.java

class Card {
      final int NUMBER;             // 상수지만 선언과 함께 초기화 하지 않고
      final String KIND;             // 생성자에서 단 한번만 초기화할 수 있다.
      static int width = 100;      
      static int height = 250;

      Card(String kind, int num) {       // 매개변수로 넘겨받은 값으로 KIND와 NUMBER를 초기화한다.
            KIND = kind;
            NUMBER = num;
      }

      Card() {
            this("HEART", 1);
      }

      public String toString() {
            return "" + KIND +" "+ NUMBER;
      }
}

class FinalCardTest {
      public static void main(String args[]) {
            Card c = new Card("HEART", 10);
//       c.NUMBER = 5;       에러발생! cannot assign a value to final variable NUMBER
            System.out.println(c.KIND);
            System.out.println(c.NUMBER);
      }
}
[실행결과]
HEART
10



1. class  앞에 붙는 경우 : 상속이 안된다.

 public final  class Point2D {  --> 상속 (extends) 불가

 

2. method (메소드) 앞에 붙는 경우 : 오버라이딩 불가

 public final void print(){

 
3 변수 앞에 붙는 경우 ==> 상수가 된다 (변경 불가)

 private final int x = 10;

  **** 단 변수 앞에 붙는 경우 생성자에서는 변경이 가능하다.



출처 - 자바 초보스터디.