[제어자(Modifier)]
- 접근 제어자와 그 외의 제어자로 구분
- 접근제어자: public, protected, private, default
- 그 외 제어자 : static, final, abstract, native, transient, synchronized, volatile, strictfp
- 클래스, 변수, 메소드의 선언부에 부가적인 의미 부여하도록 사용함.
- 여러개가 함께 조합으로 활용될 수 있음.
- 순서는 상관없으나 통상 접근제어자를 제일 머저 표기
- 접근제어자 4개 중 하나만 선택해야함(예로 public private처럼 함께 사용 불가)
⦁static
- 클래스 공통이라는 의미로 클래스 변수, 클래스 메소드 등으로 사용
- 클래스 변수는 1개의 값을 공유 (인스턴스 변수와 대응된다)
- 클래스 메소드는 인스턴스 메소드 보다 편리하고 속도가 빠르다.
⦁final
- 마지막, 변경 불가라는 의미
- 변수의 경우 상수값으로 고정되어 변경이 불가
- 메소드의 경우 오버라이딩 불가
- 클래스의 경우 자식 클래스로 확장 불가
-생성자를 이용한 final 맴버변수 초기화
final int NUMBER = 7; |
모든 카드의 넘버가 7로 고정
카드의 넘버를 바꾸고 싶다면 어떻게 해야하나?
1. final사용
2. 초기화시키는 부분을 구분
final int NUMBER; //생성자를 이용한 final
Card(int num) { //변수의 초기화 NUMBER = num; } |
-static과 비교하여 생각하라
static 변수는 값이 변할 수 있다. but 인스턴스마다 똑같다.
final 변수는 인스턴스마다 다른 값을 가질 수 있다. but 고정값이다.
⦁abstact
- 추상적 틀, 미완성이라는 의미
- 실제 수행해야할 내용은 추후에 정의하고 여기에서는 선언부만 작성한다는 의미
- 메소드 앞에 붙으면 선언부만 정의하고 구체적인 내용은 상속클래스에서 정의한다는 뜻
- 클래스 앞에 붙으면 클래스에 추상메소드가 있다는 뜻을 나타낸다.
⦁ 접근 제어자(Aceess Modifier)
- public, protected, default, private
- 맴버와 클래스에 사용하여 외부로부터 접근을 제한
- default 접근제어자는 아무 수식어가 명시되지 않을 때
- 접근제어자가 사용될 수 있는 곳 : 클래스, 맴버 변수, 메소드, 생성자
제어자 | 같은 클래스 | 같은 패키지 | 자손클래스 | 전 체 |
public |
|
|
|
|
protected | 별로잘안씀 |
|
|
|
default |
|
|
|
|
private |
|
|
|
|
대 상 | 사용가능한 접근 제어자 |
클래스 | public,, (default) |
메서드 | public, protected, (default), private |
맴버변수 | |
지역변수 | NONE |
class Time { private int hour; // 클래스 내에서 자유롭게 변경하고 싶을 경우 private을 쓴다 private int minute; private int second;
Time( int h, int m, int s) { hour = h; minute = m; second = s; }
//setter 함수를 통해 값을 변경 void setHour(int h) { if( h< 24 && h>=0) hour = h; } //접근제어뿐만아니라 함당하게 변경가능)
public String toString() { return hour + ":" + minute + ":" + second; } // 재정의하여 이용함 (원래 toString은 주소값만 리턴하는 역할!) }
class TimeTest { public static void main(String[] args) { Time t = new Time(12, 25, 40); t.setHour(52); System.out.println(t); } }
|
⦁자료 은닉(Data hoding)
- 캡슐화
- private를 이용하여 외부의 접근을 차단하여 데이터 보호
- 또는 외부 노출이 불필요하거나 내부저긍로 사용이 한정된 경우에 사용함.
- 타당성 테스트를 통해 올바른 값이 배정이 된다.
대 상 | 사용가능한 접근 제어자 |
클래스 | public,, (default), final, abstract |
메서드 | 모든 접근제어자, final, abstract, static |
맴버변수 | 모든 접근제어자, final, static |
지역변수 | final |
⦁제어자의 조합
- static abstract 메소드는 없다 WHY?abstract는 내용이 없고 static은 내용이 고정(모순)
- private final 메소드는 없다.
- private abstract 메소드는 없다
- abstract final 클래스는 없다
[다형성(polymorphism)]
- 여러 가지 형태를 가질 수 있는 능력
- 하나의 참조변수로 여러 타입의 객체를 kcawh할 수 있는 것
- 즉, 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성이다.
⦁참조변수의 형변환
- 서로 상속관계에 있는 타입간의 형변환만 가능하다.
- 자손 타입에서 조상타입으로 형변환하는 경우. 형변환 생략가능
fe2.water() - 강제적 형변환을 통해 가능
class Car { String color; int door; void drive() { System.out.println("Drive");} void stop() { System.out.println("Stop");} }
class FireEngine extends Car { void water() {System.out.println("Water");} }
class Ambulance extends Car { void siren() {System.out.println("Siren");} }
class CarTest { public static void main(String[] args) { Car car = null; FireEngine fe = new FireEngine(); FireEngine fe2 = null; fe.water(); car = fe; //car.water(); 에러! car는 Car에 속하기에 water기능을 할 수 없다. fe2 = (FireEngine)car; fe2.water(); } }
|
'Studynote > Computer Science 12' 카테고리의 다른 글
10.07.제 9장 java패키지 실습 (0) | 2018.11.05 |
---|---|
10.07. 제 9장 java패키지 (0) | 2018.11.05 |
09.16 제 6장 객체지향프로그래밍2 실습 (0) | 2018.11.05 |
09.16 제6장 객체지향프로그래밍2 (0) | 2018.11.05 |
09.09. 6장 객체지향프로그래밍1 실습 (0) | 2018.11.05 |
댓글