ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] final, static 제어자
    프로그래밍/JAVA 2022. 8. 7. 11:13
    728x90

     

     

    final 제어자

    final 제어자는 값을 바꿀 수 없는 상수의 기능을 부여해준다. 

     

    final 제어자를 사용할 수 있는 대상으로는 클래스, 메소드, 필드, 지역 변수가 있다.

     

    또한, 클래스에 사용하면 해당 클래스는 다른 클래스가 상속 받을 수 없게 되고 메소드에 사용하면 해당 메소드는 오버라이딩(overriding)을 통한 재정의를 할수 없게 된다.

     

     

    - final 클래스는 상속할 수 없음

     fianl class Class1{
        ...
        }
    class Class2 extends Class{  // 에러!
    	...
    }

     

    - final 변수는 값을 재할당 할 수 없음

    final String str = "Apple";
    str = "Banana"; // 에러!

     

    - final 메소드는 오버라이딩 할 수 없음

    class Class1{
        final String method1(){
            return "안녕하세요!";
        }
    }
    public class Class2 extends Class1{
        String method1(){ // 에러!
            return "안녕하세요!";
        }
    }

     


     

    static 제어자

    static 제어자는 모든 객체가 공유할 수 있는 의미를 부여한다.

    static이 붙지않은 변수는 인스턴스 변수이고 인스턴스 변수에 static이 붙은 변수는 전역(클래스) 변수로 만들어준다. 

     

     

    static 제어자를 가지는 멤버의 특징

    - 프로그램 시작 시 최초에 단 한번만 생성되고 초기화되기 때문에 메모리에 우선 로드되어 속도가 빠르다.

     (단, 메모리가 회수되지않기 때문에 주의해야한다.)

    - 인스턴스를 생성하지 않고도 바로 사용할 수 있다.

    - 해당 클래스의 모든 인스턴스가 공유한다.

     

     

    유형별 static 사용 방법

    변수에 적용 : 모든 객체가 변수를 공용으로 사용

    public class Static1 {
        public static void main(String[] args) {
            Button customer1 = new Button();
            customer1.click();
            customer1.click();
            customer1.click();
            customer1.click();
    
            Button customer2 = new Button();
            customer2.click();
        }
    }
    ----------------------------------------------------
    public class Button {
    
        private static int count = 0; // 모든 객체가 공유하게 됨(공용변수)
    
        public void click(){
            count++;
            System.out.println("고객님의 대기번호는 " + count + "입니다.");
        }
    
    }

     

     

    블록에 적용 : 같은 객체가 어려개 만들어지더라도 단 한번만 실행되는 코드블록을 만듬

    public class Static2 {
        public static void main(String[] args) {
            Block block1 = new Block();
            Block block2 = new Block();
            block1.print();
            block2.print();
        }
    }
    ----------------------------------------------------
    public class Block {
        static {
            System.out.println("static 블록을 테스트합니다.");
            System.out.println("이 블록은 객체를 생성할 때 단 한번만 실행됩니다.");
        }
        public void print(){
            System.out.println("😃😃😃😃😃😃😃😃😃");
        }
    }

     

     

    메소드에 적용 : 객체를 사용하지 않고 클래스, 메소드 이름으로 접근하여 사용

    import java.util.Scanner;
    
    public class Static3 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("반지름을 입력하세요.");
            double r = sc.nextDouble();
            double area = AreaUI.calcCircle(r);
    
            System.out.println("원의 넓이는 : " + area);
        }
    }
    -----------------------------------------------------
    public class AreaUI {
        public static double calcCircle(double radius){
            return (radius * radius) * Math.PI;
        }
    }

     

    [참조] : http://tcpschool.com/java/java_modifier_ectModifier

     

     

     

     

     

    728x90

    '프로그래밍 > JAVA' 카테고리의 다른 글

    [Java] Object 클래스  (0) 2022.08.07
    [Java] 패키지(package), imPort문  (0) 2022.08.07
    [Java] 접근 제어자  (0) 2022.08.07
    [Java] 캡슐화, 은닉화  (0) 2022.08.06
    [Java] 메소드(method)(2)  (0) 2022.08.06

    댓글

Designed by Tistory.