[Java의 정석]Chapter7.객체지향 프로그래밍2(17~20)

Hello_Wendy·2022년 4월 27일
0

자바의 정석

목록 보기
54/61
post-thumbnail

Chapter 7. 객체지향 프로그래밍 2

17. 제어자(modifier)

  • 제어자(modifier) : 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여

  • 제어자의 종류
    1. 접근 제어자 : public, protected, (default), private
    2. 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp

  • 제어자는 클래스나 멤버변수와 메서드에 주로 사용

  • 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능

  • 단, 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용 가능
    ▶즉, 하나의 대상에 대해서 public과 private를 함께 사용할 수 없음

  • 제어자들 간의 순서는 관계 없지만, 주로 접근 제어자를 제일 왼쪽에 놓는 경향이 있음

  • 접근 제어자 외에도 여러 제어자가 있으나, static, final, abstract를 제외하고는 자주 사용되지 않음

18. static - 클래스의, 공통적인

  • static : '클래스의' 또는 '공통적인'의 의미를 가짐
  • 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스 변수(static멤버변수)는 인스턴스에 관계없이 같은 값을 가짐
  • 그 이유는 하나의 변수를 모든 인스턴스가 공유하기 때문
  • static이 붙은 멤버변수와 메서드, 그리고 초기화 블럭은 인스턴스가 아닌 클래스에 관계된 것이기 때문에 인스턴스를 생성하지 않고도 사용 가능
  • 인스턴스 메서드와 static메서드의 근본적인 차이메서드 내에서 인스턴스 멤버를 사용하는가의 여부에 있음

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

제어자대상의미
static멤버변수모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됨 / 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능 / 클래스가 메모리에 로드될 때 생성
메서드인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 됨 / static메서드 내에서는 인스턴스멤버들을 직접 사용불가
  • 인스턴스 멤버를 사용하지 않는 메서드는 static을 붙여서 static메서드로 선언하는 것이 인스턴스를 생성하지 않고도 호출이 가능해서 더 편리하고 속도도 더 빠름
class StaticTest {
	static int width = 200; //클래스 변수(static변수)
    static int height = 120; //클래스 변수(static변수)
    
    static {			//클래스 초기화 블럭
    	//static변수의 복잡한 초기화 수행
    }
    
    static int max(int a, int b) { //클래스 메서드(static메서드)
    	return a > b ? a : b;
    }
}

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

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

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

제어자대상의미
final클래스변경될 수 없는 클래스, 확장될 수 없는 클래스가 됨. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없음
메서드변경될 수 없는 메서드,final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없음
멤버변수/지역변수변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 됨

final클래스의 대표적인 예는 String과 Math임

final class FinalTest {		//조상이 될 수 없는 클래스
	final int MAX_SIZE = 10; //값을 변경할 수 없는 멤버변수(상수)
    
    final void getMaxSize() {  //오버라이딩할 수 없는 메서드(변경불가)
    	final int LV = MAX_SIZE; //값을 변경할 수 없는 지역변수(상수)
        return MAX_SIZE;
    }
}

20. abstract - 추상의, 미완성의

  • abstract : '미완성의'의 의미
  • 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용

    abstract가 사용될 수 있는 곳 = 클래스, 메서드

제어자대상의미
abstract클래스클래스 내에 추상 메서드가 선언되어 있음을 의미
메서드선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림
abstract class AbstractTest { //추상 클래스(추상 메서드를 포함한 클래스)
	sbstract void move(); 	//추상 메서드(구현부가 없는 메서드)
}
  • 추상 클래스는 아직 완성되지 않은 메서드가 존재하는 '미완성 설계도'이므로, 인스턴스 생성불가

    	AbstractTest a = new AbstractTest(); //에러. 추상클래스의 인스턴스 생성불가
profile
안녕 나의 새로운 세상

0개의 댓글