"제어자"의 두 판 사이의 차이
잔글 |
|||
(사용자 2명의 중간 판 14개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | ''' | + | '''제어자'''(modifier) 또는 '''제한자'''란 [[객체 지향 프로그래밍]](OOP)에서 [[클래스]], [[변수]] 또는 [[메소드]]의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자는 [[클래스]]나 [[멤버변수]]와 [[메소드]]에 주로 쓰이며 하나의 대상에 대해 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, [[접근제어자]]의 경우 하나만 선택해서 사용해야 한다. |
− | == | + | == 제어자의 종류 == |
− | * [[ | + | * [[접근제어자]](access modifier) : public, protected, private, default |
− | * 그 외 | + | * 그 외 제어자와 관련된 키워드 : static, final, abstract, native, transient, synchronized, volatile, strictfp |
− | == | + | == 접근제어자 == |
− | * [[퍼블릭]](public) : 클래스 외부에서도 접근할 수 있다. | + | * '''[[퍼블릭]]'''(public) : 클래스 외부에서도 접근할 수 있다. |
− | * [[프로텍티드]](protected) : 다른 [[클래스]]에서는 접근할 수 없지만, [[상속]] 받은 [[자식 클래스]]에서는 접근이 가능하다. | + | * '''[[프로텍티드]]'''(protected) : 다른 [[클래스]]에서는 접근할 수 없지만, [[상속]] 받은 [[자식 클래스]]에서는 접근이 가능하다. |
− | * [[프라이빗]](private) : [[클래스]] 내부에서만 접근이 가능하다. | + | * '''[[프라이빗]]'''(private) : [[클래스]] 내부에서만 접근이 가능하다. |
− | * [[디폴트]](default) : | + | * '''[[디폴트]]'''(default) : 접근제어자를 적용하지 않았을 때 적용되는 제어자이다. |
− | == 그 외 | + | == 그 외 제어자와 관련된 키워드 == |
− | * static : 클래스가 인스턴스화되지 않아도 접근 가능하다. | + | * '''static''' : 클래스가 인스턴스화되지 않아도 접근 가능하다. |
− | + | '''static 변수''' | |
− | + | 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. | |
− | + | 클래스 변수는 인스턴스를 생성하지 않고 사용이 가능하다. | |
− | + | 클래스가 메모리에 로딩될 때 생성된다. | |
− | |||
− | |||
− | |||
− | == | + | '''static 메소드''' |
+ | 인스턴스를 생성하지 않고도 호출이 가능한 [[메소드]]가 된다. | ||
+ | static 메소드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다. | ||
+ | |||
+ | * '''final''' : 기존 클래스로부터 새로운 서브(확장) 클래스를 만들 수 없다. | ||
+ | |||
+ | '''final 클래스''' | ||
+ | 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. | ||
+ | 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. | ||
+ | |||
+ | '''final 메소드''' | ||
+ | 변경될 수 없는 메소드 | ||
+ | final로 지정된 메소드는 오버라이딩을 통해 재정의될 수 없다. | ||
+ | |||
+ | '''final 멤버변수 / final 지역변수''' | ||
+ | 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수가 된다. | ||
+ | |||
+ | * '''abstract''' : 클래스, 인터페이스, 메소드가 추상적임을 알린다. | ||
+ | |||
+ | '''abstract 클래스''' | ||
+ | 클래스 내에 [[추상메소드]]가 선언되어 있음을 알린다. | ||
+ | |||
+ | '''abstract 메소드''' | ||
+ | 선언부만 작성하고 구현부는 작성하지 않은 추상 메소드임을 알린다. | ||
+ | * '''native''' : 자바가 아닌 언어로 구현한 후 자바에서 사용하려고 할 때 이용하는 키워드이다. | ||
+ | * '''transient''' : 객체의 직렬화 시에 해당 필드를 직렬화 대상에서 제외한다. | ||
+ | * '''synchronized''' : 스레드를 동기화하기 위해서 제공하는 키워드이다. | ||
+ | * '''volatile''' : 변수를 메인 메모리에 저장하겠다고 명시한다. | ||
+ | * '''strictfp''' : 부동소수(floating point) 계산의 특정한(restrict) 사항을 제어하는 데 사용된다. | ||
+ | |||
+ | {{각주}} | ||
+ | |||
+ | == 참고자료 == | ||
* 더블에스, 〈[https://doublesprogramming.tistory.com/76 자바 - 제어자(Modifier) ]〉, 2017-01-31 | * 더블에스, 〈[https://doublesprogramming.tistory.com/76 자바 - 제어자(Modifier) ]〉, 2017-01-31 | ||
− | * 차재복, 〈[http://www.ktword.co.kr/abbr_view.php?m_temp1=2657 Access Modifier 접근 제한자, 접근 수정자, 접근 제어자 ]〉, 《정보통신기술용어해설》, 2019-11-27 | + | * 차재복, 〈[http://www.ktword.co.kr/abbr_view.php?m_temp1=2657 Access Modifier 접근 제한자, 접근 수정자, 접근 제어자]〉, 《정보통신기술용어해설》, 2019-11-27 |
* 안뇽쌀룽아, 〈[https://okjkillo.tistory.com/entry/%ED%82%A4%EC%9B%8C%EB%93%9C-native 키워드 native ]〉, 2019-09-08 | * 안뇽쌀룽아, 〈[https://okjkillo.tistory.com/entry/%ED%82%A4%EC%9B%8C%EB%93%9C-native 키워드 native ]〉, 2019-09-08 | ||
* 에몽이, 〈[https://emong.tistory.com/187 java Synchronized ]〉, 2017-12-21 | * 에몽이, 〈[https://emong.tistory.com/187 java Synchronized ]〉, 2017-12-21 | ||
* Nesoy, 〈[https://nesoy.github.io/articles/2018-06/Java-volatile Java volatile이란? ]〉, 2018-06-09 | * Nesoy, 〈[https://nesoy.github.io/articles/2018-06/Java-volatile Java volatile이란? ]〉, 2018-06-09 | ||
− | * 솔데스크, 〈[https://itpass.tistory.com/900 | + | * 솔데스크, 〈[https://itpass.tistory.com/900 자바의 희귀한 키워드들(keyword)들 : native, transient, volatile, const, strictfp]〉, 2009-02-26 |
== 같이 보기 == | == 같이 보기 == | ||
34번째 줄: | 63번째 줄: | ||
* [[클래스]] | * [[클래스]] | ||
* [[메소드]] | * [[메소드]] | ||
− | * [[ | + | * [[접근제어자]] |
− | |||
− | |||
{{프로그래밍 언어|검토 필요}} | {{프로그래밍 언어|검토 필요}} |
2020년 8월 13일 (목) 09:52 기준 최신판
제어자(modifier) 또는 제한자란 객체 지향 프로그래밍(OOP)에서 클래스, 변수 또는 메소드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자는 클래스나 멤버변수와 메소드에 주로 쓰이며 하나의 대상에 대해 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, 접근제어자의 경우 하나만 선택해서 사용해야 한다.
제어자의 종류[편집]
- 접근제어자(access modifier) : public, protected, private, default
- 그 외 제어자와 관련된 키워드 : static, final, abstract, native, transient, synchronized, volatile, strictfp
접근제어자[편집]
- 퍼블릭(public) : 클래스 외부에서도 접근할 수 있다.
- 프로텍티드(protected) : 다른 클래스에서는 접근할 수 없지만, 상속 받은 자식 클래스에서는 접근이 가능하다.
- 프라이빗(private) : 클래스 내부에서만 접근이 가능하다.
- 디폴트(default) : 접근제어자를 적용하지 않았을 때 적용되는 제어자이다.
그 외 제어자와 관련된 키워드[편집]
- static : 클래스가 인스턴스화되지 않아도 접근 가능하다.
static 변수 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. 클래스 변수는 인스턴스를 생성하지 않고 사용이 가능하다. 클래스가 메모리에 로딩될 때 생성된다.
static 메소드 인스턴스를 생성하지 않고도 호출이 가능한 메소드가 된다. static 메소드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.
- final : 기존 클래스로부터 새로운 서브(확장) 클래스를 만들 수 없다.
final 클래스 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.
final 메소드 변경될 수 없는 메소드 final로 지정된 메소드는 오버라이딩을 통해 재정의될 수 없다.
final 멤버변수 / final 지역변수 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수가 된다.
- abstract : 클래스, 인터페이스, 메소드가 추상적임을 알린다.
abstract 클래스 클래스 내에 추상메소드가 선언되어 있음을 알린다.
abstract 메소드 선언부만 작성하고 구현부는 작성하지 않은 추상 메소드임을 알린다.
- native : 자바가 아닌 언어로 구현한 후 자바에서 사용하려고 할 때 이용하는 키워드이다.
- transient : 객체의 직렬화 시에 해당 필드를 직렬화 대상에서 제외한다.
- synchronized : 스레드를 동기화하기 위해서 제공하는 키워드이다.
- volatile : 변수를 메인 메모리에 저장하겠다고 명시한다.
- strictfp : 부동소수(floating point) 계산의 특정한(restrict) 사항을 제어하는 데 사용된다.
각주[편집]
참고자료[편집]
- 더블에스, 〈자바 - 제어자(Modifier) 〉, 2017-01-31
- 차재복, 〈Access Modifier 접근 제한자, 접근 수정자, 접근 제어자〉, 《정보통신기술용어해설》, 2019-11-27
- 안뇽쌀룽아, 〈키워드 native 〉, 2019-09-08
- 에몽이, 〈java Synchronized 〉, 2017-12-21
- Nesoy, 〈Java volatile이란? 〉, 2018-06-09
- 솔데스크, 〈자바의 희귀한 키워드들(keyword)들 : native, transient, volatile, const, strictfp〉, 2009-02-26
같이 보기[편집]