-
제어자Programming/JAVA 2020. 6. 13. 02:09
제어자는 클래스와 변수 그리고 메서드의 선언부에 사용되며 부가적인 의미를 부여한다.
제어자의 종류
- 접근제어자 public protected default private
- 그 외 static final abstract native transient synchronized volatile strictfp
사용시 주의사항
- 클래스나 멤버변수 메서드에 주로 사용되나 여러자를 조합하는 것이 가능.
- 하지만 접근제어자는 여러가지를 섞어서 쓸 수 없다.
1. static
static 은 다뤘던 내용이다. '공통적인'이라는 의미를 가지고 있는데, 우리가 앞부분에서 인스턴스를 만들어 각각의 인스턴스에 서로 다른 값을 줬지만 static 이 붙은 변수나 메서드는 인스턴스 생성없이 사용이 가능하며 클래스가 로드 되자마자 메모리에 로드되는 것을 알 수 있었다. 앞에서 우리는 인스턴스를 사용하지 않는 메서드는 static메서드로도 고쳐보고 했었다. 기억이 안나면 다시 변수와 메서드로 가보자. 값을 공유하고 있는 static 은 공통적인 이라는 것을 알고있자.
2.final
마지막의, 변경이 될 수 없는 이라는 뜻이다. 거의 모든 것에 사용이 된다고 한다.
● 변수에 사용되면 변경할 수 없는 상수가 된다.
● 메서드에 사용되면 오버라이딩 할 수 없다.
● 클래스에 사용되면 자신을 확장하는 자손클래스를 정의하지 못한다.
class Card{ final int NUMBER; final String KIND; static int width=100; static int height=250; Card(String kind, int num){ KIND=kind; NUMBER=num; } Card(){ this("HEART",1); } public String toString(){ return KIND+" "+NUMBER; } class FinalCardTest{ Card c = new Card("HEART",10); c.NUMBER=5; System.out.println(c.KIND); System.out.println(c.NUMBER); System.out.println(c);//System.out.println(c.toString()); }
잠깐... 코드블럭 쓸 수 있었잔아... 자주 애용해야겠다... 나만 모르고있었어...
▼▼▼▼▼▼▼▼▼▼▼ ● 변수에 사용되면 변경할 수 없는 상수가 된다. ▼▼▼▼▼▼▼▼▼▼▼
이런식으로 final 이라도 각각의 인스턴스에 대해서 final 변수의 값을 바꿔줄 수 있어.
책에 나온 내용인데 카드의 경우 52장의 카드가 있는데 카드의 값을 바꾸기보다는 카드의 순서를 바꾸라는 말이 있다.
그게 더 안전한 방법이다. 우리 그렇게 쓰자.
3.abstract
사전적의미로 추상적인 이라는 뜻이다.
정의는 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않ㅇ느 추상 메서드를 선언하는데 사용된다.
● 클래스에 선언하게 하면 추상메서드가 클래스내에 선언되어있다.
● 메서드는 선언부만 작성하고 구현부는 작성하지 않은 추상메서드.
abstract class test{//추상클래스 추상메서드를 포함한 클래스라는 뜻 abstract void testabstract(){ //선언부만 작성되고 구현부는 작성하지 않은 메서드라는 뜻 } }
제어자의 종류
- 접근제어자 public protected default private
- 그 외 static final abstract native transient synchronized volatile strictfp
이번 부터는 접근제어자다. 접근 제어자는 멤버와 클래스에 사용되어 밖에서 참조하지 못하게 제한 하는 것이다.
범위가 넓은 순 부터 나열 하자면 public > protected > default > private 순으로 나열할 수 있다.
public : 접근에 전혀 제한이 없다.
protected : 패키지에 관계없이 상속관계에 있는 자손클래스에서 접근할 수 있도록, 또는 같은 패키지 내에서도 접속 가능
(일부 default 기능도 존재하기도 함.)
default : 같은 패키지내의 클래스에서만 접근이 가능하도록 함.
private : 같은 클래스 내에서만 사용 되도록 제한.
같은 클래스 같은 패키지 자손 클래스 전 체 public ○ ○ ○ ○ protected ○ ○ ○ default ○ ○ private ○ 접근제어자를 이용하게 되면 외부에서 접근 시도를 줄일 수 있고, 외부적으로 알려지면 불필요한 것들을 내부에 숨길 수도 있다. 또 만약에 나중에 코드 수정이 필요하다고 하면 메서드에 public 이 있으면 소스코드를 다 뒤져야 하는데 private라고 예를 들어 주기 되어 있으면 같은 클래스만 보면 된다. 이처럼 제어자 하나하나가 정말 큰 변화를 만든다고 한다. 나중에 실전 때 쓰는 버릇좀 들여야겠다.
'Programming > JAVA' 카테고리의 다른 글
abstract include interface (0) 2020.06.27 형변환(메모) (0) 2020.06.16 super (0) 2020.06.12 오버라이딩(overriding) (0) 2020.06.09 상속(inheritance) - 중간 저장 (0) 2020.06.08