티스토리 뷰

Programing/Java

Java1 - 17. Contructor

HNNN 2017. 5. 1. 16:15


#실습( 저번 시간 복습 )


package constructorex;
class School{
  String schName;

  String address;

  int gradeNumber;
 
 //alt+shift+s->r(setter getter 자동 입력)


  public String getSchName() {
      return schName;
   }
   public void setSchName(String schName) {
      this.schName = schName;
   }
   public String getAddress() {
      return address;
   }
   public void setAddress(String address) {
      this.address = address;
   }
 public int getGradeNumber() {
      return gradeNumber;
 }
   public void setGradeNumber(int gradeNumber) {
      this.gradeNumber = gradeNumber;
 }

  void setSchoolData(String schName, String address, int gradeNumber){

     setSchName(schName);
     setAddress(address);
     setGradeNumber(gradeNumber);
  
   }
  void printSchoolInfo(){
     System.out.println("학교 이름 : "+schName +"\t 학교 주소 :"+address+"\t 총 학년 수 :"+gradeNumber);
  
   }
 
}


public class ConstructorTest {

 public static void main(String[] args) {

      School dae = new School();
      dae.setSchoolData("대치 초등학교", "서울시 대치동", 6);
      dae.printSchoolInfo();

 }

}




클래스{
  맴버
  1, 변수 (데이터 저장)
  2. 메서드(데이터 처리 , 데이터입력, 데이터 추출)
    비즈니스메서드 : setter  getter
   생성자 : 메서드 중에서 객체 생성과 초기값에 관여하는 메서드
  }
  
 ※ 생성자 메서드 : 생성자는 객체를 만들 떄 필요한 메서드이다 
   

생성자는   1) 리턴 타입을 쓰지 않는다 
              2) 클래스의 이름을 그대로 메서드 이름에 써야한다
              3) 기본 생성자와 인수 생성자로 나뉜다


√ 생성자는 객체를 처음 만들 때 초기값을 넣을 수 있다
√ 기본 생성자 외에 인수를 setting  할 수 있는 "인수 잇는 생성자"도 둘수 있게 된다
√ setter는 기본 생성 이후에 값을 넣는 건데 인수 있는 생성자는 setting  하기 전부터 값을 객체에 넣어놓고 시작할 수 있다 
√ "초기화" 를 해놓고 작업을 수행할 수있다.




class A{


   int a,m,o,p,q;

//인스턴스 변수(인스턴스를 만들어야 사용할 수 있는 변수


}
public class ConstructorTest {

 public static void main(String[] args) {


 //생성자는 자동으로 만들어 질 수있다. ( 자동으로 안만들어지기도 함 ) 
    A objA = new A();

//내 안에 방을 만들었다 (생성자가 관여한다)
      // 그런데 생성자 없다 --> 컴파일러가 자동으로 생성자가 만들어진다 
             (기본 생성자, default constructor라고 함)
  

//객체가없는 인스턴스 

    new A();


      // 임시 메모리 : 객체가 없기 떄믄에 한번 쓰고 버린다 다시는 찾을 수 없다 
    new A().num=10;
    

--------------

< 용어 구분 >

int obj=0;

   (변수)

School dae= new School();
         (객체)

----------------


    A unjoo = new A;
           //생성자(메서드)--> new 키워드 + 생성자 : "인스턴스"
           //인스턴스  : 해당 클래스를 사용하기 위해서 클래스의 변수(0)나 메서드(X)를 메모리에 올려놓는일




※ 자동으로 만들어줌 (하지만 같은 클래스 내에 다른 생성자가 있으면 직접 만들어 주어야 한다 )
 
(class이름)(){

//매개변수가 없다  기본 생성자 <= 컴파일러가 자동으로 만들어 줌
          하지만 다른 생성자가 있으면 자동으로 안 만들어줌
          내 손으로 직접 만들어 줘야함

 }



package constructorex;
class Person{

   String name;

   int age;
  

  public String getName() {
        return name;

   }
  public void setName(String name) {
          this.name = name;
   }

  public int getAge() {
      return age;
   }
  public void setAge(int age) {
    if(0<=age && age <=100)
       this.age = age;

  }

  public void printPerson(){
      System.out.println(name+"의 나이 : "+age );
  }
 
}


public class ConstructorTest2 {

 public static void main(String[] args) {
  
     Person hae = new Person("홍길동",20);

          // error 발생  : (The constructor Person(String, int) is undefined)

 }

}



<해결 방법>


√ 인자 생성자


- class 안에 기본 생성자 만들어줌

 ( 단축키 : ctrl + space )


 public Person(String name, int age) {
      this.name=name;
      setAge(age);
  
 }
 



#다른 문제



package constructorex;


class Person{
     String name;
     int age;
 
     public Person(String name, int age) {
      this.name=name;
      setAge(age);
  

     }
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }
     public int getAge() {
      return age;
     }
     public void setAge(int age) {
      if(0<=age && age <=100)
       this.age = age;
     }
 

      void printPerson(){

      System.out.println(name+"의 나이 : "+age);
     }
 
}

public class ConstructorTest2 {

 public static void main(String[] args) {
      Person hae =new Person("홍길동", 20);
      hae.printPerson();


      // hae.name("홍첨지"); // name 의 값을 변경
  
      Person hong=new Person();

//error 발생 : The constructor Person() is undefined


      hong.printPerson();


  }

}

--> 이미  생성자가 만들어져 있기때문에 자동으로 불러오기가 불가능하다


< 해결 방법 >


기본 생성자

※ class 안에 기본 생성자 생성


 public Person() {
      name = "미설정";
      age = -1;

 }    






#실습




package constructorex;

import javax.swing.JOptionPane;

class Data{
  int num1;
  int num2;
  int num3;
  double num4;
 
     //contructor 단축키 : alt+shift+s-->o


  public Data(int num1) {
    super();
    this.num1 = num1;
  }

  public Data(int num1, int num2) {
    super();
    this.num1 = num1;
    this.num2 = num2;
  }
 

  public Data(int num1, int num2, int num3) {
    super();
    this.num1 = num1;
    this.num2 = num2;
    this.num3 = num3;
  }

 

  Data(int n1, int n2, int n3, double n4){

    setNum1(n1);

    setNum2(n2);

    setNum3(n3);

    setNum4(n4);

  }

  public Data(){

    num1=4;

    num2=3;

    num3=7;

    num4=1.2;

  }


 //setter 생성

  public void setNum1(int num1) {

    this.num1 = num1;

  }

  public void setNum2(int num2) {

    this.num2 = num2;

  }

  public void setNum3(int num3) {

    this.num3 = num3;

  }

  public void setNum4(double num4) {

    this.num4 = num4;

  }
  public void printData(){

    System.out.println("num1 : "+num1);

    System.out.println("num2 : "+num2);

    System.out.println("num3 : "+num3);

    System.out.println("num4 : "+num4);

  }


 //이 메서드를 호출하면 변수 4개에 값을 넣을 수 있다.

  public void insertData(){

    this.num1 = Integer.parseInt(JOptionPane.showInputDialog("데이터1 입력"));

    this.num2 = Integer.parseInt(JOptionPane.showInputDialog("데이터2 입력"));

    this.num3 = Integer.parseInt(JOptionPane.showInputDialog("데이터3 입력"));

    this.num4 = Double.parseDouble(JOptionPane.showInputDialog("데이터4 입력-실수"));
  }

 
}


public class ConstructorTest3 {

 public static void main(String[] args) {

   Data data = new Data(10, 20, 30, 1.1);

   Data data3 = new Data(10);

   Data data4 = new Data(10, 20)

   Data data5 = new Data(10, 20, 30);

   data.printData();


   data.setNum1(100); // 10을100으로 변경하겠다 

   data.setNum2(200); // 20-->200

   data.setNum3(300); // 30-->300

   data.setNum4(10.1);// 1.1-->10.1

 

   data.printData();


   Data data2 = new Data();

   data2.printData();

   data2.insertData();

   data2.printData();

 }
 
}


'Programing > Java' 카테고리의 다른 글

Java1 - 19. Static  (0) 2017.05.02
Java1 - 18. 만들어져있는 클래스 사용 방법  (0) 2017.05.02
Java1 - 16. private  (0) 2017.04.28
Java1 - 15. Method 만들기  (0) 2017.04.27
Java1 - 14. class  (0) 2017.04.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함