본문 바로가기

Kosta 교육

[Day8 - JAVA] chap6. 객체지향언어1_2

4.1 메서드 오버로딩

메서드 오버로딩(method overloading)이란?

: 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 메서드 오버로딩이라 함

 

조건

: 메서드의 이름이 동일해야 함

: 매개변수의 개수 또는 타입이 달라야 함

: 매개변수는 같고 리턴 타입이 다른 경우 오버로딩이 성립되지 않음 >> 리턴타입은 영향을 주지 않음

 

void println();
void println(boolean x);
void println(char x);
void println(char[] x);
void println(double x);
void println(float x);
void println(int x);
void println(long x);
void println(String x);

5.1 생성자

생성자(Constructor)란?

: 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드

: 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용

: 몇가지 조건을 제외하고 메서드와 동일

: 모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 함

 

생성자 조건

: 클래스의 이름과 동일해야 함

: 리턴 값이 없으며, void를 사용하지 않음

 

기본 생성자

: 매개변수가 없는 생성자

: 클래스에 생성자가 하나도 없을 경우 컴파일러가 기본 생성자를 추가함

: 단. 생성자가 존재할 경우 기본 생성자를 만들어주지 않기 때문에 기본 생성자를 직접 만들어주어야 함

클래스이름(타입 변수명, 타입 변수명, ...){
	// 인스턴스 생성 시 수행될 코드
    // 주로 인스턴스 변수의 초기화 코드를 적음
}

class Card{
	Card(){ // 매개변수가 없는 생성자
    	// 인스턴스 초기화 작업
    }
    
    Card(String kind, int number{ // 매개변수가 있는 생성자
    	// 인스턴스 초기화 작업
    }
}

public static void main(String[] args){
	Card c = new Card();
    // new에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성
    // 생성자 Card()가 호출되어 수행
    // 연산자 new의 결과로 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장
}

5.2 this(), this

this()란?

: 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용

: 다른 생성자 호출은 생성자의 첫 문장에서만 가능

 

생성자를 이용해 인스턴스 복사가 가능

class Car{
	String color;
    String gearType;
    int door;
}

Car(String color, String gearType, int door){
	this.color = color;
    this.gearType = gearType;
    this.door = door;
}
Car(Car c){ // 생성자에서 참조변수를 매개변수로 받아 인스턴스 변수들의 값을 복사
	this(c.color, c.gearType, c.door);
}

 

this란?

: 인스턴스 자신을 가리키는 참조변수

: 인스턴스의 주소를 가짐

: 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재


6.1 변수의 초기화

: 변수를 선언하고 처음으로 값을 저장하는 것

: 멤버변수(인스턴스/클래스 변수)와 배열은 각 타입의 기본값으로 자동 초기화되어 초기화 생략 가능

: 지역변수는 사용 전 초기화 필수


6.2 멤버변수 초기화

1) 명시적 초기화(explicit initialization)

class Car{
	int door = 4; // 기본형 변수 초기화
    Engine e = new Engine(); // 참조형 변수 초기화
}

2) 생성자(constructor)

Car(String color, String gearType, int door){
	this.color = color;
    this.gearType = gearType;
    this.door = door;
}

3) 초기화 블럭(initialization block)

- 인스턴스 초기화 블럭

: {}

:생성자에서 공통적으로 수행되는 작업에 사용되며, 인스턴스가 실행될 때마다 생성자보다 먼저 실행

 

- 클래스 초기화 블럭

: static {}

: 클래스 변수의 복잡한 초기화에 사용되며 클래스가 로딩될 때 실행

 

깃허브 링크 : https://github.com/Khjin06k/kostaJava/tree/main/src/day8/chap6_OOP1