백엔드/Java의 정석

TIL 정리_07

ran4 2022. 2. 22. 22:26

 

 

객체지향 II 

 

참조형 반환타입

객제주소를 정수(int)타입으로 반환

객체주소를 줬기 때문에 객체를 다룰 수 있게 됨 

"반환타입이 참조형이라는 것은 메서드가 객체의 주소를 반환한다는 것을 의미한다"

 

재귀호출

메서드가 자기 자신을 호출해서 일을 시키는 것 

void method() {

       method(); //재귀호출

}

무한반복을 피하기 위해 조건문이 필수적으로 따라다닌다.

 

클래스 메서드와 인스턴스 메서드 : iv 사용여부로 구분 

인스턴스 메서드 

인스턴스 생성 후 '참조변수.메서드이름()'으로 호출

인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드

메서드 내에서 인스턴스 변수(iv) 사용가능

 

Static 메서드(클래스 메서드)

객체생성없이 '클래스이름.메서드이름()'으로 호출 

인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드

메서드 내에서 인스턴스 변수(iv) 사용불가 // iv를 사용하지 않으면 static을 붙이기

 

Q..static을 언제 붙여야 할까?

속성(멤버 변수)중에서 공통 속성에 static을 붙인다

인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다.

 

메서드 간의 호출과 참조 (중요)

  static 메서드 -----호출x-----> 인스턴스 메서드

  static 메서드 <----호출o------ 인스턴스 메서드

-인스턴스 메서드가 호출됐으면 이미 객체 생성 (iv가 이미 존재)

-static 메서드는 iv 사용불가. 객체가 있을지 없을지 모르기 때문

(객체 생성없이 호출가능하기 때문에 객체 생성 후 호출가능한 iv는 사용불가)

 

오버로딩

한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것

성립조건

1. 메서드 이름이 같아야 함

2. 매개변수의 개수 or 타입이 달라야 한다

3. 반환타입은 영향이 없다

오버로딩의 올바른 예

매개변수는 다르지만 같은 의미의 기능 수행 (println();)

메서드 이름 : add, println, round, random 대체로 동사 

 

가변인자

매개변수의 개수를 동적으로 지정해 줄 수 있는 기능

'타입...변수명'과 같은 형식으로 선언

가변인자는 마지막 매개변수여야 한다

 

생성자 

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

인스턴스 생성시 수행할 작업(iv초기화)에 사용

규칙

1. 생성자 이름이 클래스 이름과 같아야 함

2. 리턴값이 없다 (void를 붙이지 않음)

3. 모든 클래스는 반드시 생성자를 가진다.

클래스이름(타입 변수명, 타입 변수명) {} 

 

기본 생성자

매개변수가 없는 생성자

생성자가 하나도 없을때만 컴파일러가 자동으로 추가한다

클래스이름( ) { } //(매개변수) {하는일} 없음

 

매개변수가 있는 생성자

인스턴스를 생성하는 동시에 원하는 값으로 초기화 할 수 있음

인스턴스 생성 후 인스턴스 변수의 값을 변경하는 것보다 코드가 간결함

 

생성자에서 다른 생성자 호출하기 this()

생성자 간에도 서로 호출가능

코드 중복을 제거하기 위해 사용한다

조건

1. 생성자의 이름으로 클래스이름 대신 this를 사용한다

2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다

(다른 생성자로 인해 호출 이전의 초기화 작업이 무의미해지므로 첫 줄)

 

참조변수 this

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

인스턴스 메서드에서 사용가능 //static 메서드에서는 사용불가

지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용 (this가 붙으면 iv)

 

**this this()는 비슷하게 생겼을 뿐 완전히 다른 것이다.

this참조변수이고 this()생성자이다

 

변수의 초기화

멤버변수(iv, cv)는 자동초기화

지역변수(lv)는 사용전 수동으로 초기화해야 한다

 

멤버변수의 초기화

1. 명시적 초기화 (=) 대입연산자 선언시 자동초기화

2. 생성자

3. 초기화 블럭

-인스턴스 초기화 블럭 : 인스턴스 변수를 초기화 하는데 사용

-클래스 초기화 블럭 : 클래스변수를 초기화 하는데 사용

 

멤버변수의 초기화 시기와 순서

클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때 단 한 번 초기화된다

인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다 각 인스턴스별로 초기화가 이루어진다

cv -> iv

자동 -> 간단 -> 복잡 0 -> = > static{} 생성자

 

초기화 순서 

클래스 초기화 인스턴스 초기화
기본값 명시적
초기화
클래스
초기화블럭
기본값 명시적
초기화
인스턴스
초기화블럭
생성자
cv 0 cv 1 cv 2 cv 2
iv 0
cv 2
iv 1
cv 2
iv 2
cv 2
iv 3
1 2 3 4 5 6 7

 

'백엔드 > Java의 정석' 카테고리의 다른 글

TIL 정리_09  (0) 2022.02.24
TIL 정리_08  (0) 2022.02.23
TIL 정리_06  (0) 2022.02.21
TIL 정리_05  (0) 2022.02.21
TIL 정리_04  (0) 2022.02.19