출처 - Java의 정석 기초편 (남궁 성)
1. 메서드란?
- 일련의 문장들을 하나로 묶은 것
- 장점: 코드 재사용 가능, 관리 용이, 중복 제거, 간결
- 블랙박스(black box)
- 메서드 정의란 선언부(header)와 구현부(body) 작성하는 것
- 선언부: 반환타입(반환값이 없는 경우 void), 매개변수 선언(0~n개, 타입 생략 불가)
- 구현부: 지역변수, return문(0~1개, 자동 형변환 가능한 것)
반환타입 메서드이름(타입 매개변수명, 타입 매개변수명, ...) // 선언부
{
// 메서드 호출시 수행될 코드, 구현부
}
int add(int a, int b)
{
int result = a+b;
return result;
}
2. 메서드 호출
- 인수(argument)와 매개변수(parameter): 개수, 타입(자동 형변환) 일치
메서드이름(값1, 값2, ...); // 메서드 호출
print99danAll(); // void print99danAll() 호출
int result = add(3, 5); // int add(int x, int y) 호출, 결과 result 저장
3. return문
- 실행중인 메서드를 종료하고 호출한 메서드로 복귀
- 반환타입이 void 가 아닌 경우(컴파일러 자동추가로 생략 가능), 반드시 return문 필요
- 항상 결과값이 반환 되어야 하므로 참, 거짓 나누어 return문 작성
- 반환값으로 수식도 가능, 수식을 계산한 결과가 반환
4.호출스택(call stack)
- 메서드 작업에 필요한 메모리 공간 제공
- 메서드 작업을 마치면 할당되었던 메모리 공간 반환
- 호출스택 제일 위에 있는 메서드가 현재 실행 중
- 아래에 있는 메서드(caller)가 바로 위의 메서드 호출
5. 매개변수
- 기본형 매개변수: 변수의 값을 읽기만 가능 (값)
- 참조형 매개변수: 변수의 값을 읽고 변경 가능 (주소)
6. static 메서드(클래스 메서드)
- 객체 생성 없이 '클래스이름.메서드이름(매개변수)' 으로 호출
- 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용 불가
- 인스턴스 메서드 호출 불가
7. 인스턴스 메서드
- 인스턴스 생성 후 '참조변수.메서드이름()' 으로 호출
- 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용 가능
- static 메서드 호출 가능
8. 오버로딩(overloading)
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 관계없다.
9. 생성자(constructor)
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
- 인스턴스 초기화란, 인스턴스 변수들을 초기화하는 것
- 조건: 생성자의 이름은 클래스의 이름과 같아야 하고, 생성자는 리턴 값이 없지만 void 붙이지 않음
- 오버로딩 가능
- 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아님
클래스이름(타입 변수명, 타입 변수명, ...){
// 인스턴스 생성시 수행될 코드
// 주로 인스턴스 변수의 초기화 코드를 적는다.
}
class Point {
Point() { // 매개변수가 없는 생성자
}
Point(int x, int y) { // 매개변수가 있는 생성자
}
}
10. 기본 생성자(매개변수가 없는 생성자)
- 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러가 자동적으로 기본 생성자(default constructor) 컴파일
클래스이름() {} // 기본 생성자
Point() {} // Point 클래스의 기본 생성자
11. 매개변수가 있는 생성자
- 인스턴스를 생성하는 동시에 원하는 값으로 초기화 가능
- 간결하고 직관적인 코드
class Car {
String color;
String gearType;
int door;
Car() {} // 기본 생성자
Car(String c, String g, int d) { // 매개변수 있는 생성자
color = c;
gearType = g;
door = d;
}
}
Car c = new Car("white", "auto", 4); // 객체 생성과 동시에 초기화
12. 생성자 this()
- 생성자 간 서로 호출
- 생성자의 이름으로 클래스이름 대신 this 사용, 첫 줄에서만 호출 가능
13. this
- 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다.
- 인스턴스 메서드에서 사용 가능, static 메서드에서 사용 불가
- 인스턴스 변수(iv)와 지역변수(lv) 구별할 때 사용
14. 변수의 초기화
- 멤버변수(cv, iv)는 기본값으로 자동 초기화
- 지역변수(lv)는 사용 전 반드시 수동 초기화
class InitTest {
int x; // 인스턴스 변수
int y = x; // 인스턴스 변수
void method1() {
int i; // 지역변수
int j = i; // 에러. 지역변수를 초기화하지 않고 사용
}
}
15. 멤버변수 초기화
- cv(클래스 로딩시 단 한 번) → iv(인스턴스가 생성될 때마다)
- 자동 → 간단 → 복잡
- 자동 → 명시적 → 초기화 블럭, 생성자
'Java' 카테고리의 다른 글
super, super(), package, import문 (1) | 2022.09.30 |
---|---|
상속, 포함, Object클래스, 오버라이딩 (0) | 2022.09.28 |
클래스, 객체, 선언 위치에 따른 변수의 종류 (0) | 2022.09.22 |
배열(Array) (2) | 2022.09.21 |
반복문(for, while) (0) | 2022.09.19 |