생성자, 메소드 개념 확실히 구분할 것.
생성자는 객체의 초기화를 담당
생성자 선언을 생략하면 기본 생성자가 바이트 코드에 자동 추가됨.
클래스가 class로만 선언되면 기본 생성자도 public이 생략됨.
[public] 클래스() {}
-> Car myCar = new Car();
마지막 Car()이 기본 생성자
생성자 블록 내부에 객체 초기화 코드가 작성됨.
클래스( 매개변수선언, ... ) { 객체초기화코드 }
매개값 "그랜저"
, "검정"
, 300
3개가 제공 되었을 때 매개변수선언
// 클래스 선언
public class Car {
// 생성자 선언
Car(String model, String color, int maxSpeed {
}
}
만약 기본 생성자를 호출해서
Car myCar = new Car();
로 작성할 경우
오류 발생
Car 생성자가 선언 되었기 때문에 기본 생성자 호출이 불가능함.
필드 초기화 방법
name, ssn은 객체 생성 시점에서 값을 받음. 생성자의 매개값으로 값 받아들이기 위해서 생성자에서 필드 초기화
Korean 생성자 매개 변수를 s와 n 사용.
-> 너무 짧아 가독성 안 좋음.
일반적으로 매개변수 이름은 필드와 동일하게 함. (아니면 비슷하게)
필드 앞에 this.
을 붙여서 객체 자신을 참조하여 사용함.
↓ 수정된 생성자 코드
public Korean(String name, String ssn) {
this.name = name;
this.ssn = ssn;
}
다양한 외부 데이터로 객체 초기화를 위해 생성자도 다양화 시킴.
생성자 오버로딩: 매개 변수를 달리하는 생성자를 여러 개 선언
public class 클래스 {
클래스( [타입 매개변수, ...] ) {
...
}
클래스( [타입 매개변수, ...] ) {
...
}
}
Car(String model, String color) {...}
Car(String color, String model) {...}
생성자 오버로딩 (손코딩)
this()
this()로 중복 코드 줄이기 (손코딩)
생성자 오버로딩에서 생긴 중복 코드
Car(String model) { this.model = model; this.color = "은색"; this.maxSpeed = 250; } Car(String model, String color) { this.model = model; this.color = color; this.maxSpeed = 250; } Car(String model, String color, int maxSpeed) { this.model = model; this.color = color; this.maxSpeed = maxSpeed; }
3개의 생성자 내용이 비슷함. 마지막 생성자에서 호출하도록 수정
메소드 선언부 => 메소드 시그너처
구성
리턴값의 타입
-> 메소드 실행 후 결과값의 타입
리턴값이 없으면 리턴 타입은 void
ex) 계산기에서 전원켜기메소드(powerON())과 나누기메소드(divide())의 리턴 타입
voide powerOn() {...} double divide( int x, int y ) {...}
divide()
의 타입을 int로 할 경우 컴파일 에러 발생
메소드 실행이 중요한 경우는 변수 선언 없이 메소드 실행만도 가능
divide(10, 20);
자바 식별자 규칙에 맞게 작성
메소드가 어떤 기능을 수행하는지 알기 쉽도록 이름 지정
데이터를 외부에서 받아야할 경우
powerOn()
은 데이터가 필요 없으니 매개 변수 X
divide()
는 데이터를 받아와 계산을 하니 매개 변수 O
double divide(int x, int y);
double result = divide( 10, 20 );
int x에는 10, int y에는 20이 저장
int 타입인데 실수 타입을 사용할 경우 컴파일 에러 발생
(byte타입은 int타입으로 자동 타입 변환되어 컴파일 에러 X)
메소드 선언 (손코딩)
(메소드 이름 오타난 건 후에 수정함. Caculator -> Calculator)
메소드 호출 (손코딩)
앞서 선언한
Calculator
메소드 호출
객체 생성, 차조 변수 myCalc이용.
...
으로 선언하면 메소드 호출 시 자동으로 값에 따라 배열이 생성. 손코딩
매개 변수를 목록으로 정해서 선언할 경우
return
은 메소드 실행 강제 종료의 역할break
문 사용 가능return문 (손코딩)
void setGas()
: 리턴값 없는 메소드로 매개값 받아서 gas 필드값 변경
메소드( 매개값, ... );
타입 변수 = 메소드(매개값, ...);
클래스 내부에서 메소드 호출 (손코딩)
클래스 참조변수 = new 클래스(매개값, ...);
클래스 외부에서 메소드 호출 (손코딩)
클래스 내 동일한 이름의 메소드를 여러 개 선언
-> 하나의 메소드 이름에 여러 기능을 담기 위함
System.out.println()
도 메소드 오버로딩의 예시임메소드 오버로딩 (손코딩)