-
[Java] final, static 제어자프로그래밍/JAVA 2022. 8. 7. 11:13728x90
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