[Java] 제어자 (modifier)

2022. 8. 19. 03:21·Language/Java
728x90

제어자

  • 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다.
  • 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.
  • 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.
접근 제어자 public, protected, default, private
그 외 static, final, abstract, synchronized, native, transient, volatile, strictfp

static

static : 클래스의, 공통적인

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

static 대상 의미
멤버변수 멤버변수 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. 
클래스변수는 인스턴스변수를 생성하지 않고 사용가능
클래스가 메모리에 로드될 때 생성된다.
메서드 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
static 메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.

final

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

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

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

생성자를 통해서 final 멤버변수 초기화

final이 붙은 변수는 상수이므로 보통은 선언과 초기화를 동시에 하지만, 인스턴스변수의 생성자에서 초기화할 수 있다.

abstract

abstract : 추상의, 미완성의

abstract 대상 의미
클래스 클래스 내에 추상메서드가 선언되어 있다는 것을 의미한다.
메서드 선언부만 작성하고 구현부는 작성하지 않은 메서드를 말한다.
abstract class Abstract {	// 추상클래스
	abstract void run();	// 추상메서드
    void move() {
    	System.out.println("달립니다.....");
    }
}

접근제어자

멤버 또는 클래스에 사용되어, 외부로부터의 접근을 제한한다.

접근 제어자가 사용될 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자

private 같은 클래스 내에서만 접근이 가능하다.
default 같은 패키지 내에서만 접근이 가능하다. (기본값)
protected 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능하다.
public 접근 제한이 없다.

접근 제어자를 이용한 캡슐화

접근 제어자를 사용하는 이유

외부로부터 데이터를 보호하기 위해서

외부에는 불필요, 내부적으로 사용되는 부분을 감추기 위해서

제어자의 조합
대상 사용가능한 제어자
클래스 public, (default), final, abstract
메서드 모든 접근 제어자, final, abstract, static
멤버변수 모든 접근 제어자, final, static
지역변수 final

제어자를 조합해서 사용할 때 주의할 점

  • 메서드에서 static 과 abstract 를 함께 사용할 수 없다.

- static메서드는 구현부(몸통)에 있는 메서드만 사용할 수 있기 때문이다.

 

  • 클래스에 abstract과 final을 동시에 사용할 수 없다.

- 클래스에 final을 사용한다는 것은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성해야한다.

 

  • abstract메서드의 접근제어자가 private이 될 수 없다.

- abstract메서드는 자손클래스에서 구현을 해주어야하는데, 접근제어자가 private이면 자손클래스에서 접근을 할 수 없기 때문이다.

 

  • 메서드에 private과 final을 같이 사용할 수 없다.

- 접근제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하기 때문이다.

'Language > Java' 카테고리의 다른 글

[Java] 정리 (다형성, 추상...)  (0) 2022.08.19
[Java] 클래스(Class), 객체(Object), 인스턴스(Instanse)의 개념  (0) 2022.08.19
[Java] 실습 (event) Click  (0) 2022.08.18
[Java] 실습 (event)  (0) 2022.08.18
[Java] 실습 (event)  (0) 2022.08.18
'Language/Java' 카테고리의 다른 글
  • [Java] 정리 (다형성, 추상...)
  • [Java] 클래스(Class), 객체(Object), 인스턴스(Instanse)의 개념
  • [Java] 실습 (event) Click
  • [Java] 실습 (event)
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    파이썬
    객체
    Java
    event
    HTML
    next.js
    Python
    CSS
    자바스크립트
    TypeScript
    타입스크립트
    변수
    MySQL
    제어문
    web
    JavaScript
    리액트
    array
    object
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Java] 제어자 (modifier)
상단으로

티스토리툴바