[JAVA] 객체지향 프로그래밍-OOP(호출스택,오버로딩,생성자)
호출 스택
- 스택(stack)
- 스택의 사전 정의는 ‘쌓다’로 접시처럼 쌓아놓은 것을 의미한다.
- 호출 스택(call stack)
- 메소드 수행에 필요한 메모리가 저장되는 공간
- 메소드 호출 ->호출스택에 메모리 할당, 종료 -> 해제
- 아래 메소드가 다음 메소드를 호출하면 다음 메소드가 쌓인다.
- 메소드가 쌓이게 되면 맨 위 메소드가 실행되고 나머지는 대기한다.
flowchart LR
main --> methodA --> methodB --> methodC --> 메소드호출끝 -.-> methodC -.-> methodB -.-> methodA -.-> main
이런 식으로 Last-in-First-out(마지막으로 들어오면 첫 번째로 나감) 큐로 볼 수 있다.
메소드 오버로딩(Method overloading)
메소드 오버로딩이란 하나의 클래스 안에 같은 이름의 메소드를 여러 개를 정의해서 다양한 상황에서 사용하는 것
오버로딩 성립조건
- 메소드 이름이 같아야 한다.
- 매개변수의 개수나 타입이 달라야 한다.
- 반환 타입에 영향이 없다.
생성자
인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메소드’ 인스턴스 생성 시 수행할 작업(인스턴스변수 초기화)에 사용 이름이 클래스 이름과 동일해야 한다.
this(), this
표기한 것과 같이 this()와 this는 다른 것이다.
- this
- 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다.
- 모든 인스턴스 메소드에 지역변수로 숨겨진 채로 존재한다.
- this(), this(매개변수)
- 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용된다.
변수의 초기화
- 지역변수는 사용하기 전에 반드시 수동 초기화를 해야 한다.
멤버변수(클래스변수와 인스턴스변수)와 배열의 초기화는 선택적이지만, 지역변수 초기화는 필수다.
멤버변수의 초기화
- 멤버변수의 초기화 방법
- 명시적 초기화
1
2
3
4
class Car {
int door = 4; // 기본형 변수 초기화
Engine e = new Engine(); // 참조형 변수 초기화
}
- 초기화 블록(복잡한 블록의 초기화에만 사용)
IV(Instance Variable) :인스턴스 초기화 블록 : {}
CV(Class Variable) :클래스 초기화 블록 : static {}
- 생성자 - IV 초기화
- 멤버변수의 초기화 시점
- 클래스 변수 : 클래스가 처음 로딩될 때 한 번
- 인스턴스 변수 : 인스턴스가 생성될 때마다
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.