07-Constructor&Method
생성자
생성자는 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.
- 1) 필드를 초기화하거나 2)메소드를 호출해서 객체 사용 준비를 하거나
호출로 생성자가 실행되면, heap 영역에 객체가 생성되고 객체의 주소가 리턴된다.
생성자 규칙
- new 키워드 뒤 호출한다. A a = new A;
- 생성자 이름은 클래스 이름과 같다.
- 객체 생성 시점에서 수행이 필요한 문장이 있다면, 생성자 내부에 정의해놓는다. 즉, 객체 생성시(즉 클래스 복사 시) 생성자를 호출한다.
- 자바 모든 클래스에는 자동 으로 기본 생성자 정의되어있다. 클래스명( ) { }
- 기본 생성자 대신에 사용자가 정의하는 생성자로 변경이 가능하다 변경되면 기본 생성자는 자동으로 삭제된다.
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)
// 위의 네 선언은 오류가 나지 않는다. 내부적으로 자바의 배열은 명령형 매개변수로 바구는 것이 가능하다. 나머지는 바꿀 수 없음.