업무를 구분하여 작성할 때 사용
중복코드를 최소화 할 수 있다.
instance method, static method 2가지
Polymorphism 지원
⇒ method Overload / method Override
접근지정자 반환형 method명 (매개변수 ...) {
업무구현
}
-method는 호출하여 일을 수행하고, 반환형으로 처리한 결과를 받는다.
호출)
//반환형이 없을 때 - void
metohd명 (값);
//반환형이 있을 때 - return값을 받음
데이터형 변수명 = method명 (값);
< 폴더개념 >
public : 클래스 외부에서 호출 가능
protected : 같은 패키지의 다른 클래스에서는 호출 가능, 패키지가 다르면 상속관계의 자식클래스에서만 호출 가능
private : 클래스 안에서만 호출 가능
default : 같은 패키지의 다른 클래스에서 호출 가능
< 메모리개념 >
static : static method로 만들 때
final : Override를 막을 때
synchronized : multi thread에서 동시호출을 막을 때
method 안에서 업무 처리한 결과를 밖으로 내보낼 때 사용
method를 호출한 곳에서 결과 값을 받을수 있다.
void : 반환값 없음
⇒ 기본형데이터형과 참조형데이터형을 설정할 수 있다.
method 외부에 존재하는 값(arguments)을 method 내부로 전달하기 위한 변수
method를 호출할 때 매개변수의 개수와 형에 대해 일치하여 호출
클래스의 인스턴스 변수를 사용하여 일을 처리하는 method
객체화 하여 다음와 같이 호출
객체명.method명();
package day0616;
/**
* instance method : instance variable을 사용하여 업무를 처리하는 일
*
* @author user
*/
public class UseInstanceMethod {
int age;
/**
* 나이를 넣으면 태어난 해를 출력해주는 일
*/
public void printBirth() {
if (age > -1) {
System.out.println(age + "살은" + (2023 - age));
} else {
System.out.println(age + "살은 잘못된 나이입니다.");
} // end else
} // printBirth
public static void main(String[] args) {
// printBirth(); //static 영역에서는 instance영역의 method를 직접 호출할 수 없다.
// 2.객체화 : 클래스명 객체명=new 클래스명();
UseInstanceMethod uim = new UseInstanceMethod();
// instance 변수에 값을 할당
uim.age = 26;
// 4.method 호출
uim.printBirth();
}
}
▶실행결과
26살은1997
객체가 가지고있는 값을 사용하여 일처리를 하는 게 아니라, 매개변수로 입력된 값을 가지고 일시적인 연산을 할 때 사용
객체화 하지않고 다음과 같이 호출
클래스명.method 명();
package day0616;
/**
* static method : instance variable의 값을 사용하지 않고, 입력된 값으로만 업무처리할 때.
*
* @author user
*/
public class UseStaticMethod {
public static void printHelloMsg() {
System.out.println("안녕하세요? 오늘은 금요일입니다.");
System.out.println("내일은 쉽니다. 포항항항항^o^");
}
public static void main(String[] args) {
// static method는 객체화 없이 클래스명.method명으로 호출한다.
UseStaticMethod.printHelloMsg();
}
}
▶실행결과
안녕하세요? 오늘은 금요일입니다.
내일은 쉽니다. 포항항항항^o^
class Test {
public void methodA() {
}
public static void methodB() {
}
} //Test class
// instance method 호출
//객체화
Test t = new Test();
//호출 - 객체명.method명();
t.methodA();
//static method 호출
//호출 - 클래스명.method명();
Test.methodB();
■ 반환형 없고, 매개변수 없는 형 ⇒ 고정 일
public void typeA() {
...
} //호출한 곳으로 돌아가라는 의미
호출) 객체명.method명();
객체명.typeA();
■ 반환형 없고, 매개변수 있는 형 ⇒ 가변 일
public void typeB(int i, char c) {
...
}
호출) 객체명.method명(값...)
객체명.typeB(30, 'A');
※ method가 반환형을 가지고 있다면
가장 마지막 줄에 return 값 정의
■ 반환형 있고, 매개변수 없는 형 ⇒ 고정 값
public int typeC() {
...
return 30;
}
호출) 데이터형 변수명 = 객체명.method명();
int i = 객체명.typeC(); //i=30
■ 반환형 있고, 매개변수 있는 형 ⇒ 가변 값
public int typeD(char c) {
...
return (int)c;
}
호출) 데이터형 변수명 = 객체명.method명(값...);
int value = 객체명.typeD('A'); //value=65
package day0616;
/**
* method의 4가지 형태
*
* @author user
*/
public class MethodTypes {
/**
* 반환 값 없고, 매개변수 없는 형
*/
public void typeA() {
System.out.println("고정적인 일");
} // typeA
/**
* 반환 값없고, 매개변수 있는 형 - 가변적인 일
*
* @param i 매개변수
*/
public void typeB(int i) {
System.out.println("가변적일 일" + i);
} // typeB
/**
* 반환형 있고, 매개변수 없는 형 - 고정 값
*
* @return 정수형의 값
*/
public int typeC() {
int i = 6;
return i * 2;
}
/**
* 반환형 있고, 매개변수 있는 형 - 가변 값
*
* @param d 입력 값
* @return 반환값
*/
public int typeD(double d) {
return (int) d;
}
public static void main(String[] args) {
// 객체화 : 클래스명 객체명 = new 클래스명
MethodTypes mt = new MethodTypes();
for (int i = 0; i < 10; i++) {
mt.typeA();
mt.typeB(i);
}
int i = mt.typeC();
System.out.println("고정 값 : " + i);
System.out.println("고정 값 : " + (mt.typeC() + 5));
i = mt.typeD(6.16);
System.out.println("가변 값 : " + i);
System.out.println("가변 값 : " + mt.typeD(2023.6));
} // main
} // class
▶실행결과
고정적인 일
가변적일 일0
고정적인 일
가변적일 일1
고정적인 일
가변적일 일2
고정적인 일
가변적일 일3
고정적인 일
가변적일 일4
고정적인 일
가변적일 일5
고정적인 일
가변적일 일6
고정적인 일
가변적일 일7
고정적인 일
가변적일 일8
고정적인 일
가변적일 일9
고정 값 : 12
고정 값 : 17
가변 값 : 6
가변 값 : 2023