Notice
Recent Posts
Recent Comments
«   2024/12   »
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
29 30 31
Archives
Today
Total
관리 메뉴

Cafe Binary Notation

자바 메소드 핵심 정리 본문

Java/문법

자바 메소드 핵심 정리

켄달지나 2018. 2. 7. 15:39




명품 자바 프로그래밍


자바 메소드 중요부분 정리








메소드는 다음과 같은 형식을 가진다.


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: 프로그램 전체에서 공유하여 사용할 수 있는 상수를 만들 수 있음