[TIL]메소드
메소드란? Method
기본적인 원칙 : 하나의 메소드엔 하나의 기능만 담아야한다. |
생성된 객체가 수행할 수 있는 연산 또는 행위를 기술한 것이다.
메소드 = 함수
함수가 가지고 있는 특성, 즉 함수는 리턴 값의 형을 먼저 지정하고
함수 이름을 쓴 후 매개변수들을 나열하는 방식으로 정의한다.
메소드의 종류
인스턴스 메소드
- 객체를 생성 후에 객체를 이용하여 접근 할 수 있는 메소드
- 메소드 내에서 다른 인스턴스 메소드나 클래스 메소드를 호출할 수 있다.
클래스 메소드
- 객체 생성과 무관하게 클래스 이름을 이용하여 바로 호출할 수 잇는 메소드
- 클래스 메소드는 메소드의 리턴 타입 앞에 static 키워드를 붙여서 선언한다.
- 메소드 내에서 인스턴스 변수나 인스턴스 메소드를 바로 접근하여 사용불가하다.
- 클래스 메소드 내에서 인스턴스 변수나 메소드를 사용하려면 객체를 먼저 생성해야한다.
- 클래스 메소드 내에서는 this나 super 키워드는 사용 불가
- 클래스 메소드는 자동으로 final 메소드가 되어 overriding이 불가능하다.
메소드 작성 순서
- 메소드 접근 제어자 작성
- private : 클래스 내부에서만 접근가능하며 외부에서는 접근할 수없 다.
- 생략한 경우 디폴트 : 동일한 패키지(폴더)에 있는 클래스에서만 접근이 가능하다.
- protected : 동일한 패키지 에 있는 클래스 및 서브클래스에서 접근이 가능하다.
- public : 제약 없이 어디에서나 접근이 가능하다.
- 메소드 리턴 타입
- 리턴 값의 자료형보다 크거나 같아야 한다.
- 리턴 타입이 int형이라면 return형이 char/short 같은 작은 자료형도 가능하다.
- 되돌려 줄 데이터가 없을때 void형 사용
- 메소드 이름 :
- 메소드명은 소문자로 시작
- 메소드 파라미터 :
- 매개변수 / 어규먼트라고도 함
- 있을수도 없을 수도 있다. 없다면 자료형이 있어야함
- 상수값이 있으면 실인수(10) , 없으면 가인수(int n)
- 메소드 코드
- 지역변수
- 메소드를 호출할 때 stack 메모리 영역에 메모리 할당된다.
- 메소드를 빠져 나가며 메모리 해제
- 메소드 리턴 값
- return 되는 값은 메소드 리턴 타입과 동일한 타입이거나 작아야한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package ex0731;
public class Method_Ex1 {
public static void main(String[] args) {
int a;
User4 u =new User4();
a=u.sum(10);
System.out.println(a);
a=u.sum(100);
System.out.println(a);
}
/*
55
5050
*/
}
class User4 {
public int sum(int n) {
int s =0;
for(int i=1; i<=n;i++) {
s+=i;
}
return s;
}
}
|
cs |
메모리의 stack 영역
- 메소드 호출과 관계되는 지역 변수와 매개 변수를 저장하는 영역
- 스택 영역은 메소드 호출과 함께 할당되며, 메소드의 호출이 완료되면 소멸 됨
- 스택 영역에 차례로 저장되는 메소드의 호출 정보를 스택 프레임이라 한다.
stack 스택
- 스택은 자료의 삽입과 삭제가 한쪽 끝에서만 수행되는 선형 구조
- LIFO 구조 Last In First Out 구조
- push : 스택에 데이터를 삽입하는 것
- pop : 스택에서 데이터를 삭제하는 것
- top : 스택에서 가장 위 데이터를 가리키는 위치
메소드 호출
- 리턴타입이 void가 아닌 경우
- 리턴타입이 void인 경우
메소드의 인수 전달
call by value
- 실매개 변수를 매개 매개변수로 전달
- 실매개 변수와 형식 매개변수가 기억공간을 따로 확보
call by reference
- 참조변수를 매개변수로 전달
- 실매개 변수와 형식 매개변수가 같은 기억공간을 참조
'Language > JAVA' 카테고리의 다른 글
[TIL] 메소드 오버로딩 (0) | 2020.08.03 |
---|---|
[TIL]클래스의 활용 (0) | 2020.08.03 |
[TIL] 참조 변수 (0) | 2020.07.31 |
[TIL] 클래스 (0) | 2020.07.31 |
[TIL] 객체지향 프로그래밍 (0) | 2020.07.31 |
댓글