[혼공자][week3] Day10 생성자, 메소드

Ida·2025년 1월 31일
0

혼공자

목록 보기
10/20

생성자, 메소드 개념 확실히 구분할 것.

06-3 생성자

생성자는 객체의 초기화를 담당

  • 객체 초기화
    필드 초기화, 메소드를 호출해서 객체 사용 준비 등을 함.

1. 기본 생성자

생성자 선언을 생략하면 기본 생성자가 바이트 코드에 자동 추가됨.
클래스가 class로만 선언되면 기본 생성자도 public이 생략됨.

[public] 클래스() {}
-> Car myCar = new Car();
마지막 Car()이 기본 생성자

2. 생성자 선언

생성자 블록 내부에 객체 초기화 코드가 작성됨.

클래스( 매개변수선언, ... ) { 객체초기화코드 }

매개값 "그랜저", "검정", 300 3개가 제공 되었을 때 매개변수선언

// 클래스 선언
public class Car { 

	// 생성자 선언
   Car(String model, String color, int maxSpeed {
   }
}

만약 기본 생성자를 호출해서
Car myCar = new Car();로 작성할 경우
오류 발생
Car 생성자가 선언 되었기 때문에 기본 생성자 호출이 불가능함.

3. 필드 초기화

필드 초기화 방법

  • 필드 선언 시 초기값 주기: 동일한 클래스에서 생성되는 객체는 모두 같은 값을 가짐.
  • 생성자에서 초기값 주기: 객체 생성 시점에 다양한 값으로 초기화 되어야할 때 사용됨.

생성자에서 필드 초기화 (손코딩)

name, ssn은 객체 생성 시점에서 값을 받음. 생성자의 매개값으로 값 받아들이기 위해서 생성자에서 필드 초기화

Korean 생성자 매개 변수를 s와 n 사용.
-> 너무 짧아 가독성 안 좋음.
일반적으로 매개변수 이름은 필드와 동일하게 함. (아니면 비슷하게)
필드 앞에 this.을 붙여서 객체 자신을 참조하여 사용함.

↓ 수정된 생성자 코드

public Korean(String name, String ssn) {
	this.name = name;
    this.ssn = ssn;
 }

4. 생성자 오버로딩

다양한 외부 데이터로 객체 초기화를 위해 생성자도 다양화 시킴.

생성자 오버로딩: 매개 변수를 달리하는 생성자를 여러 개 선언

public class 클래스 {
  클래스( [타입 매개변수, ...] ) {
  ...
  }
  
  클래스( [타입 매개변수, ...] ) {
  ...
  }
  


}
  • 주의할 점: 매개 변수 타입, 개수, 선언 순서가 똑같으면서 변수 미음만 변경하면 생성자 오버로딩 X
    ⇣ 예시
Car(String model, String color) {...}
Car(String color, String model) {...}

생성자 오버로딩 (손코딩)


5. 다른 생성자 호출: this()

  • 생성자 오버로딩이 많아지면 중복 코드 발생 확률 높아짐
  • 필드 초기화 내용을 한 생성자에게 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법 사용

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개의 생성자 내용이 비슷함. 마지막 생성자에서 호출하도록 수정

06-4 메소드

메소드 선언부 => 메소드 시그너처
구성

  • 리턴 타입
  • 메소드 이름
  • 매개 변수 선언
  • 메소드 실행 블록

1. 메소드 선언

리턴타입

리턴값의 타입
-> 메소드 실행 후 결과값의 타입

리턴값이 없으면 리턴 타입은 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이용.

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

  • 매개 변수를 배열 타입으로 선언
    단, 메소드 호출 전 배열 생성 해야 함.
  • 배열 생성하지 않고 목록만 넘겨주면 됨. 매개 변수를 ...으로 선언하면 메소드 호출 시 자동으로 값에 따라 배열이 생성.

손코딩

매개 변수를 목록으로 정해서 선언할 경우

2. return문

return값이 있는 메소드

  • 리턴타입이 있는 메소드는 반드시 리턴문을 사용해서 리턴값 지정이 필요함.
  • 리턴문 이후에 작성된 실행문은 실행 X

return값이 없는 메소드: void

  • void에 사용되는 return은 메소드 실행 강제 종료의 역할
  • 때에 따라 break문 사용 가능

return문 (손코딩)

  • void setGas(): 리턴값 없는 메소드로 매개값 받아서 gas 필드값 변경

3. 메소드 호출

객체 내부에서 호출

메소드( 매개값, ... );

  • 클래스 내부에서 다른 메소드 호출 시 사용

타입 변수 = 메소드(매개값, ...);

  • 메소드 호출 후 리턴값을 받고 싶을 때 사용. 변수 선언과 리턴값 대입
  • 변수 타입은 같거나 자동 타입 변환이 가능 해야 함.

클래스 내부에서 메소드 호출 (손코딩)


객체 외부에서 호출

클래스 참조변수 = new 클래스(매개값, ...);

  • 클래스로부터 객체 생성이 선행 되어야 함.

클래스 외부에서 메소드 호출 (손코딩)


4. 메소드 오버로딩

클래스 내 동일한 이름의 메소드를 여러 개 선언
-> 하나의 메소드 이름에 여러 기능을 담기 위함

  • System.out.println()도 메소드 오버로딩의 예시임

    메소드 오버로딩 (손코딩)


profile
나는 이다이다.

0개의 댓글

관련 채용 정보