본문 바로가기

Java

메서드, return문, 호출스택, 매개변수, 생성자

출처 - 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