-
CHAPTER 6. (4) return문이란? (호출 스택, Call by Value, Call by Reference 등 포함) ★★java/ㄴ CHAPTER 6. 객체지향 프로그래밍 1 2020. 3. 23. 19:11
return문
- 현재 실행중인 메서드 종료, 호출한 메서드로 복귀
- 모든 메서드는 적어도 하나의 return문 필요
void는 필요 없던데?
- 지금까지 컴파일러가 메서드 마지막에 return; 을 자동 추가했었음
호출스택
- 메서드의 작업에 필요한 메모리 공간 제공
호출된 메서드를 위한 메모리가 할당됨
(메모리는 지역변수, 연산의 중간 결과 등을 저장하는데 사용됨)
= 메서드가 작업을 마치면 할당되었던 메모리 공간 반환됨
★★ 기본형 매개변수 Call by Value
- 메서드의 매개변수에 기본 자료형 값을 전달해서 메서드를 실행 // 메서드엔 값의 복사본이 전달됨
= 원본에 아무런 영향이 없음
-> 기본형 매개변수는 변수에 저장된 값을 읽을 수만 있음 (변경 불가)
= 호출된 메서드에서 전달받은 값을 변경해도 원본의 값은 변하지 않음
★★ 참조형 매개변수 Call by Reference
- 메서드의 매개변수에 객체의 참조값(주소값)을 전달해서 메서드를 실행
// 호출된 메서드에서 전달받은 주소값에 참조되는 객체의 속성을 변경하는 것은
원본 객체의 속성을 변경하는 것과 동일
= 즉, 원본의 값이 변경됨
클래스 메서드(static 메서드)
- 객체 생성하지 않고 호출 가능 (클래스 변수와 같음)
인스턴스 메서드
- 인스턴스 생성해야만 호출 가능
ㄴ 왜? : 인스턴스 메서드는 인스턴스 변수와 관련된 작업 - 인스턴스 변수를 필요로 하는 메서드
: 인스턴스 변수는 인스턴스를 생성해야만 만들어짐
=> 인스턴스 메서드는 인스턴스를 생성해야만 호출 가능1234567891011121314151617181920212223242526272829303132333435363738394041package oop2;public class MyMethod {// 인스턴스 변수 (멤버 변수)String name;// 클래스 변수 (static정적 변수)// 정적 변수 대부분은 상수static final double PI = 3.14;// 인스턴스 메서드// 인스턴스 변수, 클래스 변수 모두 사용 가능void memberMethod() {System.out.println("인스턴스 변수 사용 : " + name);System.out.println("클래스 변수 사용 : " + MyMethod.PI);}// 인스턴스 메서드// 인스턴스 메서드, 클래스 메서드 모두 사용 가능void memberMethod2() {memberMethod();MyMethod.staticMethod();}// 클래스 메서드 (정적 메서드)// 클래스 변수만 사용 가능 (인스턴스 변수 사용 불가)static void staticMethod() {// System.out.println("인스턴스 변수 사용 : " + name); 오류System.out.println("클래스 변수 사용 : " + MyMethod.PI);}// 클래스 메서드 (정적 메서드)// 클래스 메서드 사용 가능 (인스턴스 메서드 사용 불가)static void staticMethod2() {// memberMethod();MyMethod.staticMethod();}}
static 붙이는 상황
- 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것
- 클래스 변수는 인스턴스 생성하지 않아도 사용 가능
- 클래스 메서드는 인스턴스 변수 사용 불가
ㄴ 왜? : 클래스 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있기 때문
ㄴ 반대는? : 가능, 인스턴스 변수가 존재한다==static변수가 이미 메모리에 올라와서 존재한다는 의미
- 메서드 내에서 인스턴스 변수 사용하지 않으면 static 변수 사용 고려
(호출시간 짧아짐, 성능 향상)
-> 클래스 멤버변수 중 모든 인스턴스에 공통된 값 유지해야 하는 것이 있을 때 static
-> 작성한 메서드 중 인스턴스 멤버(변수, 메서드) 사용하지 않는 메서드에 static'java > ㄴ CHAPTER 6. 객체지향 프로그래밍 1' 카테고리의 다른 글
CHAPTER 6. (6) 생성자란? (0) 2020.03.23 CHAPTER 6. (5) 오버로딩이란? ★ (0) 2020.03.23 CHAPTER 6. (3) 멤버 변수란? (지역, 인스턴스, 클래스 변수, 메서드 포함) (0) 2020.03.23 CHAPTER 6. (2) 객체 배열이란? (변수, 객체, 클래스, 사용자 정의 타입 포함) (0) 2020.03.23 CHAPTER 6. (1) 객체지향 언어란? (클래스, 객체, 인스턴스 포함) (0) 2020.03.23