접근 제어자(Access modifier) / 캡슐화(encapsulation)
::::특별한 Java Story 2013. 6. 9. 02:46 |/*내용을 복사 한 후 이클립스에서
ctrl + shift + F를 눌러주세요!!*/
//P.258~261 접근 제어자(Access modifier) / 캡슐화(encapsulation)
//다른 책에서는 맨 앞에 나왔있는데, 정석에서는 중간쯤에 나오네...암튼~~ 나왔으니 한번 더 집고 넘어가자!
//사실 public , default , private 는 자기의 영역이 확실하니 기억하기가 쉬운데...
// 이놈 protected 가 신경이 쫌 쓰인다... 이놈을 쓸일이 있을까?? 정도의 생각..
// 의미는 같은 패키지와 자손 클래스까지 허용이 된다는데.~~~ 아무래도 예문을 한번 보면서 확인이 제일 빠를듯!
// 시작합니다~~Start!!!
package JavaTest;
//시간에 관련하여 작성하겠슴돠~ 앞에서 한번 한것 같은데.ㅋ 늘 그렇듯이 클래스 생성
class Time{
protected int hour; //hour 변수만 protected 로 했어요! 밑에서 한번 콕 찝어서 한번 보구 갈려구! 기억하셈!
private int minute;
private int second; //분,초는 private 로 ~ "난 니들을 이 클래스 안에서만 쓰겠어! 딴데 갈 생각 꿈도 꾸지마랏!!"
Time(int hour){ //한개짜리 매개변수 생성자 하나 만들었어요! protected 살펴볼려고 만든거랍니다....
setHour(hour);
}
Time(int hour, int minute, int second){ //매개변수 3개짜리 생성자 하나 만들었어~ 왜냐고? 맨밑에서 출력할때
//시간좀 표시할때 초기값으로 써먹어야 해서..바로 앞에서 공부했자나.ㅠ
//this.hour = hour;
//this.minute = minute; //근데~이렇게 안쓰고 밑에 처럼 쓴건~ 시간에 대한 제약 조건을 메서드로
//this.second = second; //만들려고 그런거야... 30시 머~ 막이런건 틀린거자나..그거 만들려고
setHour(hour);
setMinute(minute); //이렇게! 생성자 안에다가 결과물 메서드를 나열해 봤어~
setSecond(second);
}
public int getHour(){ //시간값을 얻는 메서드를 만들었어
return hour;
}
public void setHour(int hour){ //시간을 설정하는 매개변수를 1개 갖는 메서드 (여기서는 void 쓰는것) 조심!!!!
if(hour<0 || hour>23){ //아~이거 앞에서 했었는데..열나 짜증났던..ㅋㅋ
return ; //0보다 작거나 혹은 23시보다 크면(false / false)면 아무것도 돌려주지 마랏!! '0'이겠네..
}else{
this.hour = hour; //하나라도 true 면 여기로~ hour 를 설정!
}
}
public int getMinute(){
return minute;
}
public void setMinute(int minute){
if(minute<0 || minute>59){
return;
}else{
this.minute = minute;
}
}
public int getSecond(){
return second;
}
public void setSecond(int second){
if(second<0 || second>59){
return;
}else{
this.second = second;
}
}
///여기까지 get, set 을 이용하여 시간,분,초를 각각 조건에 맞게 꾸민거야! 몇번 써보니 외워지네~그려~
public String toString(){ //넌 머니??!!! 안되겠다..요거 다음에 toString 메서드 한번 살펴볼께!
return hour+":"+minute+":"+second; //간단히 말하면 '문자열로 돌려줘라~~'
}
}
class Time2 extends Time{ //자!!! 여기가 바로!!! 상속을 만들었어~ 원래는 다른 패키지에서 이런식으로 상속을
//받아야 하지만~ 그냥 다른 패키지에서 상속받았다 생각하고 보면 돼!
Time2(int hour) {
super(hour);
}
void pt(){
System.out.println(hour); //간단히 시간만 출력~~
}
}
public class TmieTest {
public static void main(String[] args) {
Time t = new Time(11, 30, 50); //매개변수 3개짜리 생성자가 있어서..이렇게 인자값을 3개 써줬어~ㅋ
//시간,분,초~~ 테스트 삼아서 맨 앞 변수에 30,40 막 이렇게 넣어봐
//어디어디에 에러가 나는지 알게 될거야~ㅋ
System.out.println(t.getHour()+":"+t.getMinute()+":"+t.getSecond()); //자 출력!!! 잘된다.!ㅋ
System.out.println(t.toString());
System.out.println(t);
Time2 t2 = new Time2(17); //욘석이 상속받은 메서드를 호출하는 인스턴스~
System.out.println(t2); //출력~~
//t.hour = 20; //이녀석이 설명이 하나 나와있는데...private 는 클래스 안에서만!! 접근 허용 그러니깐
//지금 코드에서는 메서드에서만 접근이 가능하다는 이야기~뷁! (-_-)ㅗ
}
}
//와~ protected 는 곰곰히 생각해보면 나중에 회사 유지보수를 한다던가 할때 분석이 장난이 아닐듯 싶다..완전 기존 개발자가
// protected 를 많이 써놓았다면.................거미줄............처럼 되있을듯하다...물론.....이게 바로 자바의 3대 객체 지향의
//개념중.........캡슐화이기는 하지만...........아오~~~ 복습만이 살길인듯 싶다...내일이면 또 까먹겠지..ㅠ_ㅠ
'::::특별한 Java Story' 카테고리의 다른 글
다형성(polymorphism)/ 참조변수의 형변환 ① (0) | 2013.06.09 |
---|---|
toString 메서드, toString() (0) | 2013.06.09 |
제어자,static,final (0) | 2013.06.08 |
Super,Super() 조상클래스 생성자 만들기 (0) | 2013.06.07 |
오버라이딩(Overriding) (0) | 2013.06.06 |