본문 바로가기
  • think normal
새로워지기/서른의 생활코딩

ex1) java_oop

by 청춘만화 2012. 2. 15.


//public class Date {  

class DateClass {  //주클래스가 하나의 문서에 들어있으므로,,,
        // class 앞엔 접근지정자를 public or 생략 둘중 하나만 가능
        // class :자료형을 만들기위한 예약어(소문자로쓴다)
        // DateClass : class명 :사용자 정의명칭
        // '{' = Date class의 시작    (set / get)
 
// int year,month,day; //원본 예제
         // int 앞엔 접근지정자를 "public,private,protect,생략" + a
         // =dataClass 맴버함수(=맴버변수=데이터 맴버)
         // new 연산자로 객체 정의시 메모리 공간으로 만들어질 항목이다.

 
         private int year,month,day; // "[a]예제"
 
 
         public DateClass(){ // 생성자범위 |->
              // = 생성자 =구성자
 
             // = 생성자 = DateClass() 앞엔 접근지정자를 "public,private,protect,생략" 중 하나 사용가능
              
// "DateClass()=생성자명" = "class명"과 반드시 일치 시켜야한다.
              
// 생성자명 앞에는 절대, "결과형(void)"을 기재할 수없다.
              
// 외부에서 생성자를 임의로 호출할 수 없다. 
              
// object가 정의 될 당시 자동적으로 호출되어 수행되는 함수로 
              
//     정의된 객체를 초기화시켜주는 역할일 뿐이다.  !!
              
// 생성자 안에는 return명령을 기재할 수 없다.

          System.out.println("디폴트 생성자 수행");

          year=2012;
          month=02;
          day=15;
          }
 
          public DateClass(int y, int m, int d){
          // = 중복함수
          // 생성자는 중복함수의 개념으로 여러개 기재가 가능하다.
          // 자바에서는 소멸자가 존재하지 않는다.
          // 만약, 동시에 두개 정의 되었을 때 초기 값을 정의한 생성자를 자동으로 우선 호출한다.

          System.out.print("3개의 매개변수를 갖는 생성자 수행");
          year=y;
          month=m;
          day=d;
          }
            // 여기까지가 "생성자범위" ->|
  
          // 생성자가 하나도 존재하지않을 경우           
            
// JVM이 디폴트 생성자를 만들어서 사용한다.
            
// (일례로,전역변수의 경우도 자동으로 초기화 시켜준다.)

 
 
 
 

 // |-> "맴버 함수"(= "메소드") = 어떻게 처리할 것인가의 방법 기재!!!
 // 추후 임의 접근을 위한 통로!!!
 // getYear()도 받아서 넘겨줌으로 리턴타입을 써줘야!!!
    public int getYear(){   //  <- public getYear(){
          // public = 접근지정자 (이 외에 3가지를 더쓸수있다.)
          // int는 결과형!!!
          // getYear = 맴버함수명
       return year;
    } 
    public int getMonth(){
       return month;
    }
    public int getDay(){
       return day;
    }
 
 
 
 
   //변경에 관련된 함수!!!   : set
   public void setYear(int y){ // 받기위해  int y
      year=y;
      //변경만할 것이기 때문에 return사용X
   }
   public void setMonth(int m){ // 받기위해  int m
      month=m;

   }
   public void setDay(int d){ // 받기위해  int d
      day=d;
   }
 
 
 
   public void setDate(int y,int m, int d){
      year=y;
      month=m;
      day=d;
   }
 
   //객체에 있는 값 출력!!! 
   public void Display(){
      System.out.print(year + "년" + month + "월" + day +"일");
   }

 

 

public class Date { 
 public static void main(String str[]){
  
  DateClass d1=null; //stack 메모리에 d1을 만들고 그 값은null로 지정하는 예제이다.
  
  //d1.Display();   // d1.  (+box = 내가 정의한 변수 +object 변수)
        // NullPointerException 오류
        // = null 상태인 변수를  접근(호출)하고자 하는 경우
  //DateMain();     // DateMain=는 생성자일뿐이다.
        // 먼저 객체를 정의해야한다.
  d1 = new DateClass();
  d1.Display();     // 여기서는 된다.(이제,null이 아니니까)
  //Display();
        // 객체정의 =>heap상에 메모리가 잡힌다.
        // 객체정의순간 -> (생성자 없이도) object에 의해 먼저 만들어진다!!
        //    -> 그리고 Date 맴버가 있는 경우
        //   -> +함수포인터+배열형태=> 함수테이블 생성 및 공유
        //   = 이것이 하나의 처리 단위가 된다.
        //    -> 그리고나서 : d1에 "번지"값이 들어간다.

        // DateMain()안에 ()가 비어있기 때문에
        //  ->자동적으로 public Date()생성자에 접근!!!
        //  -> 그리고 나서 DateMain()아래로 떨어진다.
  
  
  //d1.DateMain()   //생성자 자체에는 접근항수없다.
  DateClass d2 = new DateClass(1991,5,16);
  d2.Display();   // 생략된 this.로인해  d1.Display()와 다른 값을 뿌려준다.!!
  
      // this : 1) 프로그렘작성자가 메모리를 정의하는것이 아니라 "컴파일러"가 내부적으로 만들어준다.
      //        2) year, month, day 와 같이 맴버 함수안에 여러개가 있는 경우 그것을 구분하기 위해
      //          ( = 어느객체의 맴버인가를 명확히 해줄 목적으로 )
      //    3) d2의 번지값을 알아서 this가 전달
      //     ( = 객체의 번지를 컴파일러가 알아서 자동생성된 this에게 전달해준다.)
      //     ( = 생성자 맴버함수안에서 맴버 변수를 지칭할 경우 컴파일러는 알아서 "this."가 생략된 형태로 인식한다.
 
  
  
  
  //d2.year=2011; // 범위 밖임으로 접근할 수 없다. 
      //private 속성이기 때문에 "[a]예제"
  // 그래도 변경을 원하는 경우 = "멤버 함수"의 근본적인 역할 = 방어하면서 원하는 것을 바꾸는 경우
  d2.setYear(2011); // 이때도 자동적으로 this.year로 인식란다.
  
  // System.out.println(d2.year);  // year가 private 속성이라 꺼낼 수도 없다.
  // 그래도 출력을 원하는 경우 = getYear()를 호출한다.!!!
  System.out.println("d2의 년도이다. =" +d2.getYear());
 }
}

 

 

 

'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글

ex3) java_oop  (0) 2012.02.15
ex2) java_oop  (0) 2012.02.15
ex16) java _ 문의  (0) 2012.02.15
ex15) java  (0) 2012.02.15
ex14) java  (0) 2012.02.15

댓글