메서드란?
1 문장들을 묶어 놓은 것
2 값(입력)을 받아서 처리하고 결과를 반환 하는 것
- 장점: 중복 코드 제거, 관리 용이, 재사용 가능
return문
반환타입 void 메소드가 아닌 경우 return 문옆에 반환값이 없으면 에러 발생
// 정상
int max(int a, int b) {
if(a > b)
return a;
else
return b;
}
// 에러
int max(int a, int b) {
if(a > b)
}
스택: 밑이 막힌 상자, 위에 쌓인다.
호출 스택 call stack
: 메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출 스택에 메모리 할당, 종료되면 메모리 해제
호출 스택 변화 예제
기본형 매개변수 VS 참조형 매개변수
기본형 매개변수 - read only
참조형 매개변수 - read & write
참조형 매개변수 예제
객체의 주소를 넘겨주기 때문에 쓰기가 가능하다.
참조형 반환타입 예제
객체의 주소를 반환한다.
static 메서드 VS 인스턴스 메서드
인스턴스 메서드
- 인스턴스 생성 후 참조변수.메서드이름() 으로 호출
- 메서드 내에서 인스턴스 변수, 인스턴스 메서드 사용 가능
static 메서드 (클래스 메서드)
- 객체 생성 없이 클래스이름.메서드이름() 으로 호출
- 메서드 내에서 인스턴스 변수, 인스턴스 메서드 사용 불가 → 에러 발생
호출 예제
class My {
long a, b; // 인스턴스 변수
// 인스턴스 메서드
long add() {
return a+b; // 인스턴스 변수
}
// static 메서드
static long add(long a, long b) { // 지역 변수
return a+b; // 지역 변수
}
}
class Test {
public static void main(String args()) {
// static 클래스 메서드 호출
System.out.println(My.add(200L, 100L));
// 인스턴스 생성
My mm = new My();
mm.a = 200L;
mm.b = 100L;
// 인스턴스 메서드 호출
System.out.println(mm.add());
}
}
💡 stiatic 메서드는 ‘객체 생성 없이 호출 가능 하다’ 라고 만 아는 경우가 많은데
나아가 언제 static을 붙여야 하는지 생각할 줄 알아야 한다.
static은 인스턴스 변수를 사용하지 않을 때 붙인다.
static을 언제 붙여야 할까?
- 멤버 변수 중에서 공통 속성에 static을 붙인다
- ex)
class Card { String kind; // 무늬 int number; // 술자 static int width = 100; // 폭 static int height = 250; // 높이 }
- 인스턴스 멤버를 사용하지 않는 메서드에 static을 붙인다.
- ex)
class My { long a, b; long add() { return a+b; } static long add(long a, long b) { return a+b; } }
생성자
: 인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’
- 초기화를 편리하게 할 수 있다.
- 생성자 이름이 클래스 이름과 같아야 한다.
- 리턴값이 없다.
- 모든 클래스는 반드시 생성자를 가져야 한다.
기본 생성자
생성자가 하나도 없을 때는 컴파일러가 기본 생성자 자동 추가되지만, 코드 작성 시 기본 생성자를 만들어주면 좋다.
생성자 예제
class Card {
// 기본 생성자
Card() {
// 인스턴스 초기화
}
// 매개변수가 있는 생성자
Card(String kind, int number) {
// 인스턴스 초기화
}
}
// 생성자 호출
Card c = new Card();
Card c2 = new Card("white", 4);
생성자 this()
- 생성자에서 다른 생성자 호출할 때 사용
- 다른 생성자 호출 시 첫 줄에서만 사용 가능
this() 예제
this()를 사용하므로 코드의 중복을 제거할 수 있다.
class Card {
String color;
int door;
Card() {
this("white", 0); // Card X this O
}
Card(String kind, int number) {
color = kind;
door = number
}
}
참조변수 this
: 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메서드에서 사용가능
- 지역변수와 인스턴스 변수를 구별할 때 사용
this 참조변수 예제
이름이 같은 경우 구분해야 한다.
Card(String kind, int number) {
this.kind = kind;
this.number = number
}
변수의 초기화
- 지역변수는 사용 전 꼭!! 수동 초기화 해야함
- 멤버변수는 자동 초기화된다.
class Test {
int x;
int y = x;
void method() {
int i;
int j = i; // 지역변수는 초기화 안해주면 에러 발생!
}
멤버변수의 초기화
- 명시적 초기화 (대입연산자 =)
- int a = 4;
- 초기화 블럭
- 인스턴스 초기화 블럭 : {}
- 클래스 초기화 블럭 : static {}
- 생성자
Car(String a, int b) { this.aa = a; this bb = b; }
변수 초기화 시점
- 클래스 변수 - 클래스가 처음 로딩될 때 단 한번 (메모리에 올라갈 때)
- 인스턴스 변수 - 인스턴스가 생성될 때 마다
728x90
반응형
'객체지향 OOP' 카테고리의 다른 글
[자바의정석 기초 객체지향 개념] 참조변수 super, 생성자 super() (0) | 2022.05.30 |
---|---|
[자바의정석 기초 객체지향 개념] 오버로딩 VS 오버라이딩 (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 상속 VS 포함 (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 클래스와 객체 (0) | 2022.05.29 |
[자바의정석 기초 객체지향 개념] 0주차 (0) | 2022.05.29 |
댓글