JAVA 공부일기1-7
Java의 정석 기초편
Chapter 6 객체지향 언어Ⅰ
9. 선언위치에 따른 변수의 종류
변수의 종류 | 설명 | 선언위치 | 생성시기 | |
멤버변수 | 클래스 변수 | - 모든 객체가 공통적으로 똑같은 속성을 가질 때 사용. - 모든 인스턴스가 공통된 저장공간(변수) 공유. - static 붙임. - 객체 생성 없이 '클래스이름.클래스 변수'로 사용 가능. |
클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | - 인스턴스마다 개별적인 속성을 가질 때 사용. | 인스턴스가 생성되었을 때 | ||
지역변수 | - 메서드 내에 선언되어 메서드 내에서만 사용 가능. | 클래스 영역 이외의 영역 | 변수 선언문이 수행되었을 때 |
10. 메서드
메서드: 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것. 선언부(header)와 구현부(body)로 이루어짐.
메서드의 선언부: '반환타입', '메서드의 이름', '매개변수 선언'으로 구성. ex) int addAll (int x, int y){...}
메서드의 구현부: 메서드를 호출했을 때 수행될 문장들로 구성. 반환타입이 void가 아닌 경우 return문 필수이며 단 하나의 값만 반환 가능.(모든 메서드는 return문이 필수이며 반환타입이 void일 때는 컴파일러가 'return;'을 자동으로 추가.)
11. 호출스택(call stack)
호출스택은 메서드의 작업에 필요한 메모리 공간 제공.
메서드 호출 → 메모리 할당 → 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간 결과 등을 저장하는데 할당된 메모리 사용. → 메서드 작업 완료 → 메모리 공간 반환
호출 스택 특징
- 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받음.
- 메서드가 수행을 마치고 나면 사용했던 메모리 반환 후 스택에서 제거.
- 호출스택의 제일 위에 있는 메서드가 현재 실행중인 메서드.
- 아래에 있는 메서드가 바로 위의 메서드를 호출.
12. static 메서드와 인스턴스 메서드
클래스 메서드: static이 붙은 메서드. 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)' 으로 호출 가능.
인스턴스 메서드: 인스턴스 변수와 관련 작업을 하는 메서드. 객체를 생성해야만 호출.
메서드 간의 호출과 참조
같은 클래스에 속한 멤버들 간에는 별도의 인스턴스를 생성하지 않고도 서로 참조 또는 호출 가능.
단, 클래스멤버가 인스턴스 멤버를 참조 또는 호출하고자 할 경우에는 인스턴스를 생성해야함. 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스 멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수 있기 때문.
13. 오버로딩
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것.
조건1. 메서드 이름이 같아야 함.
조건2. 매개변수의 개수 또는 타입이 달라야함.
* 반환 타입은 오버로딩을 구현하는데 영향을 주지x.
14. 생성자
인스턴스가 생성될 때 호출하는 인스턴스 초기화 메서드. (인스턴스 초기화란, 인스턴스변수들을 초기화하는 것.)
생성자도 오버로딩 가능하므로 하나의 클래스에 여러 개의 생성자 가능.
조건1. 생성자의 이름은 클래스의 이름과 같아야 함.
조건2. 생성자는 리턴값이 없음.
기본생성자
모든 클래스에는 반드시 하나 이상의 생성자가 정의되어야 함. 컴파일 할 때, 소스파일의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러는 자동으로 기본생성자를 추가하여 컴파일함. 클래스이름(){}
15. 생성자에서 다른 생성자 호출하기 - this()
같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출 가능.
조건1. 생성자의 이름으로 클래스 이름 대신 this 사용.
조건2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출 가능. (다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문.)
16. 객체 자신을 가리키는 참조변수 - this
'this'는 참조변수로 인스턴스 자신을 가리킴. 참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼, 'this'로 인스턴스변수에 접근할 수 있음. 하지만, 'this'를 사용할 수 있는 것은 인스턴스 멤버뿐. 생성자를 포함한 모든 인스턴스메서드에는 참조변수 'this'가 지역변수로 숨겨진 채 존재함.
* this와 this()는 별개! this는 참조변수, this()는 생성자.
17. 변수의 초기화
변수의 초기화란? 변수를 선언한고 처음으로 값을 저장하는 것.
멤버변수는 초기화를 하지 않아도 자동으로 변수의 자료형에 맞는 기본값으로 초기화가 됨. 지역변수는 사용하기 전에 반드시 초기화 필요.
18. 멤버변수의 초기화 순서
1. 클래스 변수 초기화 → 인스턴스 변수 초기화
2. 자동 초기화 → 명시적 초기화 → 초기화 블럭 → 생성자