20150912
메서드(method)
메서드 자주 사용되는 내용(특정 기능을 수행)의 코드를 메서드로 작성해 놓고 호출 을 하는 방식으로 코드의 양을 줄이고 메서드 한쪽에서만 관리할 수 있어서 유지보수가 편리해 집니다.
* 메서드는 한 가지 기능만 수행하도록 작성
* 반복적으로 수행 되어야 하는 여러 문장을 하나의 메서드로 정의
* 관련된 여러 문장을 하나의 메서드로 만들어 놓는것이 좋습니다.
함수 작성법
리턴타입 메서드이름 (타입 변수명, 타입 변수명,...) {
//메서드 호출시 수행될 코드
}
int add (int a, int b){ <- 선언부
int result = a + b; <- 구현부
return result;
}
int add (int a, int b){ //구현부 int result = a + b; return result; }
메서드 마지막 부분에 return 혹은 { }블럭 마지막 문장까지 수행 했을때 종료되고 호출 했던 부분으로 돌아갑니다.
반환값이 없으면 return; 만 작성하고
있으면 return 반환값; 을 작성 하시면 됩니다.
반환값의 타입은 리턴타입과 일치해야 합니다.
int add(int a, int b) 선언부에서 리턴 타입 int 와 retrun 반환값의 타입이 일치해야 합니다.
함수 호출방법
참조변수.메서드이름();
static 메서드는 같은 클래스 안에서 인스턴스 메서드를 호출 할 수 없어요.
이유는
클래스 로딩과 객체를 만들고 생성자로 초기화 하는 순서를 생각 하셔야 해요.
클래스 로딩-> 객체 생성
static 은 클래스가 로딩될때 만들어지고 인스턴스 는 코드가 실행이 되어야 객체를 만듭니다. 그런데 인스턴스가 만들기 전에 사용할 수 있는 static 메서드에서 인스턴스 메서드를 사용하는건 아직 만들어지지 않은것을 호출 하는 것이 되겠죠?
(그래서 안됩니다.)
재귀 호출
메서드 내부에서 자기 자신의 함수를 호출 하는것
팩토리얼(!) 을 예로 들 수 있습니다.
아래 코드로 설명할게요.
long factorial (int n){ long result = 1; if (n == 1) { result = 1 ; }else { result = n*factorial(n-1); } return result; }
함수 파라미터 값인 n이 함수 안에 코드에서 n의 수를 줄여가면서 다시 자신의 함수를 호출 합니다. 그럼 조건 n == 1 이 충족 될때까지 n값을 줄여나가면서 계속 자신의 함수를 호출하겠죠? 이게 재귀 호출입니다. 자신의 함수안에서 또 자신을 호출하는거죠.
오버로딩
메서드 이름이 같아야 한다.
매개변수의 개수 또는 타입이 달라야 한다.
리턴타입이 다른것과는 상관 없다.
void sum();
void sum(int a, long b);
// 변수의 개수가 같고 변수 타입의 순서가 달라도 오버로딩이 된다.
void sum(int a, long b);
void sum(int a);
void sum(String a);
장점
메서드 이름으로 기능을 예측 할 수 있다.
메서드 이름을 절약
오류의 가능성을 줄인다.
생성자
생성자는 클래스의 이름과 같아야 한다.
생성자는 리턴 값이 없다.
객체를 만들때 예) Sum s = new Sum();
Sum(); 에 해당하는 부분이 생성자 이고 앞에 있는 new 가 인스턴스를 만든다.
생성자가 인스턴스를 만드는것이 아니다.
생성자를 만들지 않으면 기본 생성자 아무 내용도 없는 생성자를 만든다.
생성자는 멤버 변수를 초기화 해주기 위해서 사용된다.
Sum() {
a = 1;
hello = "안녕하세요";
}
매개변수가 있는 생성자도 만들 수 있다.
Sum(int c, String d) {
a = c;
hello = d;
}
객체를 만들고 초기에 변수값을 넣어줄때는
car c = new Car();
c.a = 1;
c.hello = "안녕하세요";
보다는
Car c = new Car(1, "안녕하세요"); 가 더 간결하고 직관적이다.
같은 크래스 안에서 생성자를 호출 할때는 this() 를 사용한다.
제일 첫 줄에 사용해야함
car(){
this("white", "auto", 4);
}
car(String color, String gearType, int door){...}
this 는 변수를 구별할때도 사용됨
int color;
color(int color) {
this color = color;
}
this 가 붙은건 클래스안에 있는 변수
초기화
'프로그래밍 > java' 카테고리의 다른 글
Java 다형성(polymorphism)-instanceof 연산자 (0) | 2015.09.16 |
---|---|
Java 다형성(polymorphism) (0) | 2015.09.16 |
Java 변수(Variables) (0) | 2015.09.12 |
객체 지향 프로그래밍(java Object-oriented programming) (0) | 2015.09.11 |
[Java] 자바 주석 사용법 (java comment) (0) | 2015.09.07 |