-
[자바의 정석] ch6-30 ~ ch6-41 객체지향 개념 정리 (오버로딩, 생성자, 생성자 this(), 참조변수 this, 변수의 초기화)Programming Language/Java 2021. 7. 16. 23:03
ch6-30 오버로딩(overloading)
- 한 클래스 안에 같은 이름의 메서드 여러개를 정의하는 것
(하나의 메서드 이름에 메서드 하나여야 하는데, 오버로딩은 하나의 메서드 이름에 여러개의 메서드)
- 오버로딩이 성립하기 위한 조건 (3가지)
1. 메서드 이름이 같아야함
2. 매개변수의 개수 또는 타입이 달라야함
3. 반환 타입은 영향 없음
보기1 (조건1만 성립-> 오버로딩 아님) -> 메서드 중복정의
int add(int a, int b) { return a+b; }
int add(int x, int y) { return x+y; }
보기2 (조건1만 성립-> 오버로딩 아님) -> 메서드 중복정의
int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long)(a+b); }
보기3 (조건1, 조건2 성립) -> 오버로딩이지만 컴파일러가 어떤 메서드 호출하려고 했는지 (타입 때문에)모호하기 때문에 ambiguous 에러
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
ch6-31 오버로딩(overloading) - 예제
- 오버로딩의 올바른 예: 매개변수는 다르지만 같은 의미의 기능 수행
ch6-32 생성자(constructor)
- iv 초기화 메서드
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
- 이름이 클래스 이름과 같아야함
- 리턴값이 없음(void 안붙임)
- 모든 클래스는 반드시 생성자(한 개 이상)를 가져야함
*생성자가 하나도 없을 때 컴파일러가 기본 생성자 추가해줌
Time t = new Time(); ----> 객체 생성
t.hour = 12;
t.minute = 34;
t.second = 56;
-> 위의 코드를 아래와 같이 한 줄로 바꿀 수 있음
Time t = new Time(12, 34, 56);
------------------ 생성자 호출
ch6-33 기본 생성자(default constructor)
- 매개변수가 없는 생성자
- 생성자가 하나도 없을 때만, 컴파일러가 기본 생성자 자동 추가
*모든 클래스는 반드시 1개 이상의 생성자가 있어야함 (이 규칙을 지키기 위해서 생성자가 자동 추가해줌)
클래스이름() { } // 기본 생성자
Pint() { } // Poinit 클래스의 기본 생성자
ch6-34 매개변수가 있는 생성자
Car c = new Car();
c.color = "white"; -----> Car c = new Car("white", "auto", 4);
c.gearType = "auto"; 1 4 2 3
c.door = 4;
1. 참조변수 c 만들어짐
2. 객체 생성
3. 객체 초기화("white", "auto", 4), 생성자 호출(Car("white", "auto", 4))
4. 대입 (객체와 참조변수 연결)
ch6-36 생성자 this()
- 생성자에서 다른 생성자 호출할 때 사용
- 다른 생성자 호출 시 첫 줄에서만 사용 가능
ch6-37 참조변수 this
- 생성자 this() 와 연관 없음
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메서드(생성자 포함)에서 사용 가능
- 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
<-------------------------------------------------------------정리------------------------------------------------------------->
- this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있음 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재
- this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자 호출할 때 사용
*this와 this()는 비슷하게 생겼을 뿐 완전 다른 것. this는 '참조변수'이고, this()는 '생성자'임
ch6-38 변수의 초기화
- 지역변수(lv)는 수동 초기화 해야함(사용전 꼭!)
- 멤버변수(iv, cv)는 자동 초기화됨
class InitTest {
int x; // 인스턴스 변수 (자동)
int y = x; // 인스턴스 변수
void method1() {
int i; // 지역변수 (수동)
int j = i; // 에러. 지역변수를 초기화하지 않고 사용
}
}
ch6-39 멤버변수의 초기화
- 클래스 변수 초기화 시점: 클래스가 처음 로딩될 때 단 한번 (메모리에 올라갈 때)
- 인스턴스 변수 초기화 시점: 인스턴스가 생성될 때 마다
1. 명시적 초기화(=) -> 대입연산자 (선언 시)
2. 초기화 블럭 -> 복잡한 초기화 여러문장 넣기
- 클래스 초기화 블럭 : static { }
- 인스턴스 초기화 블럭 : { }
3. 생성자 -> iv 초기화, 복잡한 초기화
-------------------------------------------------------*cv, iv 초기화1. 자동초기화 : 02. 간단초기화 : =3. 복잡초기화 : { } -> 거의 안씀 - cv 초기화-> static { } - iv 초기화-> 생성자
<-------------------------------------------------------------정리------------------------------------------------------------->
1. cv 초기화 -> iv 초기화 (초기화 시점)
2. 자동 -> 간단 -> 복잡 (초기화 순서)
============================================================================
'Programming Language > Java' 카테고리의 다른 글
[자바의 정석] ch7-12 ~ ch7-20 객체지향 개념 정리 (패키지, import문, 제어자, abstract ) (0) 2021.07.22 [자바의 정석] ch7-1 ~ ch7-11 객체지향 개념 정리 (상속, Object클래스, 오버라이딩, 참조변수 super, 생성자super() ) (0) 2021.07.19 [자바의 정석] ch6-22 ~ ch6-29 객체지향 개념 정리 (호출스택, static 메서드) (0) 2021.07.16 [자바의 정석] ch6-11 ~ ch6-21 객체지향 개념 정리 (선언위치, 변수종류, 메서드, return문) (0) 2021.07.14 [자바의 정석] ch6-1 ~ ch6-10 객체지향 언어 정리 (0) 2021.07.13