Cafe Binary Notation
자바 메소드 핵심 정리 본문
명품 자바 프로그래밍
자바 메소드 중요부분 정리
메소드는 다음과 같은 형식을 가진다.
public int getSum (int i, int j) { //접근지정자 + 리턴타입 + 메소드이름 (메소드 인자들)
int sum;
sum = i+j;
return sum;
}
1. 메소드 접근 지정자
- public : 클래스 내부/외부에서 모두 호출 가능
- protected : 클래스 내부 메소드들은 호출 가능, 다른 클래스 중 상속받은 서브 클래스만 호출 가능
- default : 동일한 패키지 내의 모든 클래스가 호출 가능
- private : 클래스 내부 멤버들만 호출 가능
cf. 클래스 접근 지정자
-public : 같은 패키지 클래스O, 다른 패키지 클래스O
-protected : 같은 패키지 클래스O, 다른 패키지의 상속받은 자식O
-default : 같은 패키지 클래스O, 다른 패키지 클래스X
-private : 같은 패키지 클래스X, 다른 패키지 클래스X (오로지 같은 클래스의 멤버에 의해서만)
2. 인자 전달 : call-by-value
자바의 메소드 호출 시 인자 전달 방식은 call by value(값에 의한 호출)이다. 그러므로 호출하는 인자의 값이 복사되어 메소드의 인자에 전달된다.
기본 타입(int, string 등)이 인자로 전달되는 경우: 인자의 값을 복사하여 메소드의 인자에 전달한다.
메소드 인자로 객체나 배열에 대한 레퍼런스가 전달되는 경우: 레퍼런스 값만 복사되어 전달된다
(객체가 통째로 복사되지 않는다! 원래부터 인자로 객체가 아닌 레퍼런스가 전달되었기 때문에)
cf. call-by-reference는 값을 복사하는 것이 아니고 실제 주소를 전달한다.
3. 메소드 오버로딩
: 한 클래스 내에 이름이 같지만 인자의 타입이나 개수가 서로 다른 여러개의 메소드를 중복 작성하는 것
cf. 오버라이딩: 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것(상속관계에 있는 클래스 같에 같은 이름의 메소드를 정의하는 것)
4. this
객체 자신을 가리킨다. 현재 실행되는 메소드가 속한 객체에 대한 레퍼런스이다.
*this()
: 생성자 코드에서만 사용할 수 있는 메소드. 동일한 클래스 내의 다른 생성자를 호출할 때 사용하고, 반드시 생성자의 첫 번째 문장에서 사용되어야 한다.
5. static
눈은 각 사람마다 있고 공기는 모든 사람이 소유(공유)한다 !!
class StaticSample {
int n; --> non-static 멤버
void g();
static int m; --> static 멤버
static void f() { };
}
*static멤버:
-클래스당 하나만 생성
-동일한 클래스의 모든 객체들이 공유
-객체 내부가 아닌 별도의 공간에 생성: 객체가 생기기도 전에 생성되고 사용 가능 (객체 사라져도 멤버는 사라지지 않음)
cf. non-static 멤버:
-객체마다 별도로 존재
-객체 생성시 멤버 생성
-멤버는 객체 내에 각각 공간 유지: 공유되지 않음 !
*static 멤버 접근:
객체명.멤버 : s1.m / s1.f()
클래스명.멤버 : StaticSample.m / StaticSample.f() (객체 없이도 클래스 이름으로 바로 접근 가능)
*static메소드는 오직 static멤버만 접근 가능
-인스턴스 메소드, 인스턴스 변수는 사용할 수 없음---> 오직 static 멤버만 접근 가능!
-this 키워드를 사용할 수 없다. (this는 호출 당시 실행 중인 객체를 가리키는데 static메소드는 객체가 만들어지기 전에 호출할 수 있기 때문)
6. final
-final클래스 : 이 클래스를 상속받을 수 없음을 지정함
-final메소드: 이 메소드를 더 이상 오버라이딩 할 수 없음을 지정함. 자식 클래스가 부모 클래스의 특정 메소드를 오버라이딩하지 못하게 하고 무조건 상속받아 사용하도록 하고자 할때 final로 지정한다.
-final 필드 상수 정의: 한 번 정의되면 값을 변경할 수 없다.
-public static final: 프로그램 전체에서 공유하여 사용할 수 있는 상수를 만들 수 있음