07-Constructor&Method



생성자

생성자는 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.

  • 1) 필드를 초기화하거나 2)메소드를 호출해서 객체 사용 준비를 하거나

호출로 생성자가 실행되면, heap 영역에 객체가 생성되고 객체의 주소가 리턴된다.


생성자 규칙

  1. new 키워드 뒤 호출한다. A a = new A;
  2. 생성자 이름은 클래스 이름과 같다.
  3. 객체 생성 시점에서 수행이 필요한 문장이 있다면, 생성자 내부에 정의해놓는다. 즉, 객체 생성시(즉 클래스 복사 시) 생성자를 호출한다.
  4. 자바 모든 클래스에는 자동 으로 기본 생성자 정의되어있다. 클래스명( ) { }
  5. 기본 생성자 대신에 사용자가 정의하는 생성자로 변경이 가능하다 변경되면 기본 생성자는 자동으로 삭제된다.
public class car{
  //생성자
  Car(String color, int cc){
    
  }
}

public class CarExample{
  public static void main(String[] args){
    Car myCar = new Car("검정", 3000);
    //Car myCar = new Car; > 오류! 생성자 변형이 되었기 때문에 기본생성자는 삭제된다. 
  }
}

생성자와 메소드?

메소드는 메모리에 복사본을 먼저 만들어줘야 한다. 즉, 생성자가 우선 호출되어 객체가 만들어진 다음에 메소드를 호출할 수 있다. 생성자는 변수값을 지정해두었다면, 생성시 변수값도 함께 지정해줘야 한다.

  • 생성자 형태
[modifier] 클래스이름([매개변수]){
  //객체 생성 시 기능 수행 문장 정의 
  //=heap 공간에 멤버변수값을 정의 “xxx” 변경 문장을 정의하는 것. 
} 

생성자는 리턴 타입이 없다.



필드 초기화와 this

this: 현재 자신 객체라는 의미

  • 멤버변수와 지역변수의 이름이 같을 때, 혹은 멤버변수와 매개변수의 이름이 같을 때 구분하기 위해 사용된다.
public class A{
  //필드
  String name;
  String id;
  
  //생성자
  public A(String naem, String id){
    this.name = name;
    this.id = id;
  }
}


overloading

  • 메소드 overloading 한 개의 클래스에 같은 이름의 메소드를 여러개 정의 할 때, 매개변수 리스트는 필수적으로 다르게 정의해야 한다. 호출시 매개변수의 입력 값, 수에 따라 자동적으로 해당 메소드가 호출된다. 리턴 타입과 modifier는 제한이 없다.

    • 매개변수 갯수나 타입이나 순서ex. (int, String)(String, int)가 다르게 정의되면 된다.
    //overloading 
    class A{
      int add(int i, int j){ return i + j};
      String add(String i, String j){return i + j}
      void add(int, String){}
      void add(String, int){}
      void add(doble i, double j){ }
    }
      
    A a1 = new A();
    add(1, 2)// 정수 3 
    add("jj", "aa") // String "jjaa"
    


  • 생성자 overloading 생성자 역시 메소드와 마찬가지로 오버로딩이 가능하다.

public class Car{
  Car(String model){}
  Car(String model, String color){}
  Car(String model, String color, int maxSpeed{}
}



  • 같은 클래스 내에서 생성자 오버로딩을 구현 할 경우
클래스( 매개변수 ) {
  this( 매개변수,  , ...);
    실행문
}

=====
  public class Car {
    String company = "현대자동차";
    String model;
    String color;
    int maxSpeed;
    
    Car(String model, String color, int maxSpeed){
      this.model = model;
      this.color = color;
      this.maxSpeed = maxSpeed; // 공통실행코드, 오버로딩 전에 한 번은 객체초기화를 시켜줘야 함
    }
    
    Car(String model){
      this(model, "은색", 250)
    }
    
     Car(String model, String color){
      this(model, color, 250)
    }
  }



메소드

: 객체의 동작에 해당하는 {} 블록. 외부로부터 매개값을 받을 수도, 실행 후 어떤 값을 리턴할수도 있다.

** 리턴 후 실행은 종료

메소드 선언

리턴타입 메소드이름(매개변수선언){
  실행할 코드
   return ;
}

** 리턴하지 않을 경우, 리턴타입 대신 void를 쓴다.


  • 매개변수의 수를 모를 경우

    ​ 매개 변수를 배열 타입으로 선언한다.

int sum(int value[]){ }

----//호출
  
  int value[] = {1, 2, 3};
  int result = sum(value);
	int result = sum(new int[] {1, 2, 3, 4, 5})


  • 메인 메소드
public static void main(String[] args)
static public void main(String[] args)
public static void main(String args[])
  
public static void main(String ... args)
  // 위의 네 선언은 오류가 나지 않는다.  내부적으로 자바의 배열은 명령형 매개변수로 바구는 것이 가능하다. 나머지는 바꿀 수 없음.