일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 포두부 보쌈
- 2589
- BFS
- mvc
- 2839
- 호유동
- 1로 만들기
- 양꼬치
- 고모네 콩탕
- 투어
- 서블릿
- dp
- 알고리즘
- 쓰레드 풀
- 동적 프로그래밍
- Spring
- 2020 KAKAO BLIND
- 스프링 MVC
- 다이나믹 프로그래밍
- 맛집
- 2638
- HTTP API
- 문자열 압축
- Servlet
- 스프링
- 완도산회
- 백준
- 맛집 투어
- 설탕 배달
- 프로그래머스
- Today
- Total
프로그래밍 공방
[Java의 정석] Chapter 7. 제어자 / Modifier 본문
제어자 / Modifier
클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.
- 접근 제어자 : public, protected, default, private
- 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp 등
하나의 대상에 대해 여러 제어자를 조합해서 사용하는 것이 가능하다.
( * 접근제어자는 하나만 사용가능, 제어자간의 순서는 상관없지만 주로 접근제어자를 가장 왼쪽에 둔다.)
static
멤버변수, 메서드, 초기화 블록 앞에 사용해서 인스턴스와의 관계를 클래스와의 관계로 만들어준다.
<참고>
인스턴스 멤버를 사용하지 않는 메서드는 static을 고려하는 것이 좋다.
인스턴스를 생성하지 않아도 호출이 가능하고, 속도도 조금 더 빠르다.
final
거의 모든 대상으로 사용될 수 있으며 해당 대상을 변경할 수 없는 것으로 만든다.
* final 변수는 일반적으로 선언과 함께 초기화를 하지만 인스턴스 변수인 경우 생성자에서 초기화 할 수 있다.
abstract
1. 메서드의 선언부만 작성하고 실제 수행 내용은 구현하지 않은 추상 메서드를 선언하는데 사용된다.
2. 클래스에 사용해서 클래스 내에 추상 메서드가 존재한다는 것을 쉽게 알 수 있게 한다.
접근 제어자
클래스, 메서드, 멤버변수, 생성자에 사용되어 대상을 외부에서 접근하지 못하도록 제한하는 역할
접근 제어자를 이용한 캡슐화
1. 접근 제어자를 사용하는 이유는 클래스 내부에 선언된 데이터를 보호하기 위함
외부로부터의 접근을 제한 -> 데이터 감추기 -> 객체지향개념의 캡슐화
2. 클래스 내에서만 사용되는 내부 작업을 위해 임시로 사용되는 멤버변수나 부분 작업을 처리하기 위한 메서드 등의 멤버들을 클래스 내부에 감추기 위함
접근 제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해
- 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
예) getter, setter
생성자의 접근제어자
생성자에 접근제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다. (default는 클래스와 동일)
* 생성자의 접근제어자를 private으로 지정하면, 외부에서 인스턴스를 생성할 수 없지만 클래스 내부에서는 생성이 가능하다.
=> singleton
추가로 생성자가 private이면 부모 클래스가 될 수 없다. (자식 클래스의 생성자에서 super() 불가능)
제어자를 조합할 때의 주의사항
1. 메서드에 static과 abstract를 함께 사용할 수 없다. (static은 몸통이 있는 메서드에만 사용할 수 있다.)
2. 클래스에 abstract와 final을 동시에 사용할 수 없다. (abstract와 final은 서로 모순된다.)
3. abstract 메서드의 접근 제어자가 private 일 수 있다.
4. 메서드에 final과 private는 같이 사용할 필요가 없다 (의미 중복)
'개발 > Java' 카테고리의 다른 글
[Java의 정석] Chapter 10. 내부 클래스 / inner class (0) | 2021.02.15 |
---|---|
[Java의 정석] Chapter 7. 다형성 / Polymorphism (0) | 2021.02.01 |
[Java의 정석] Chapter 7. 상속 / Inheritance (0) | 2021.01.10 |
[Java의 정석] Chapter 6. 객체지향 프로그래밍 1 (1) | 2021.01.03 |