3. 메서드( method )
1) 용도: 기능처리. 일반적으로 인스턴스 변수와 관련된 기능처리이다.
( 변수값 수정, 변수값 조회, 유효성검사 기능 ... )
2) 문법:
public 리턴타입 메서드명 ( [변수, ...] ) {
// [변수, ...] : 파라미터
// 파라미터는 없거나 여러개 지정 가능
문장1;
[return 값]; // 리턴값
// 리턴값은 없거나 반드시 한개만 지정 가능
}
3) 특징
- 반드시 호출해야 실행된다.
==> 호출 방법은?
가. 다른 클래스에서
step1: 반드시 객체생성해야된다
클래스명 참조변수명 = new 클래스명 ( [값,...] );
step2: 참조변수명.메서드( [값,...] );
나. 자신 클래스에서
step1: 반드시 객체생성해야된다
클래스명 참조변수명 = new 클래스명 ( [값,...] );
step2: this.메서드( [값,...] ); 또는 메서드( [값,...] );
4) 메서드의 파라미터 및 리턴값의 따른 4가지 형식
가. 파라미터 x 리턴값 x 경우
- 문법:
public class 클래스명 {
public void 메서드명( ) {
문장;
}
public void 메서드명2( ) {
문장;
this.메서드명( ); // 메서드명( );
// ==> 같은클래스내에서 ( this 생략가능 )
}
}
- 사용방법
step1) 객체생성
클래스명 참조변수명 = new 클래스명( );
참조변수명.메서드명( ); // 다른클래스에서
나. 파라미터 o 리턴값 x 경우
문법:
public class 클래스명 {
public void 메서드명1(int n) {
}
public void 메서드명2(String n) {
}
public void 메서드명3(String n, int n) {
}
}
사용:
클래스명 참조변수명 = new 클래스명( );
참조변수명.메서드명1(10);
참조변수명.메서드명2("홍길동");
참조변수명.메서드명3("홍길동", 10);
* 오버로딩 메서드 ( overloading )
- 개념: 하나의 클래스안에 동일한 이름의 메서드가 여러개 지정이
가능하다. 단, 식별하기 위해서 인자리스트( 개수, 타입, 순서 )
가 반드시 달라야한다.
- 장점: 재사용
다. 파라미터 x 리턴값 o 경우
문법:
public class 클래스명 {
public 리턴타입 메서드명( ) {
문장 1;
return 값; // 리턴되는 값: 리턴값
}
}
ex) public int x( ) {
문장;
return 100;
}
public String x( ) {
문장;
return "홍길동";
}
사용:
step1) 객체생성
클래스명 참조변수명 = new 클래스명( );
리턴값저장용변수 = 참조변수명.메서드명( );
라. 파라미터 o 리턴값 o 경우
문법:
pulic class 클래스명 {
public 리턴타입 메서드명( 변수, 변수2, ... ) {
문장;
return 값;
}
}
ex)
public int sum(int n, in n2) {
return n + n2;
}
사용:
클래스명 참조변수명 = new 클래스명( );
리턴값저장용변수 = 참조변수명.메서드명(값, 값2);
package exam09_클래스4_method;
public class Util {
// 1. 파라미터 x 리턴값 x
public void method1() {
System.out.println("method1");
};
// 2. 파라미터 o 리턴값 x
public void method1(int n) {
System.out.println("method1: " + n);
}
public void method1(String n) {
System.out.println("method1: " + n);
}
public void method1(String n, int n2) {
System.out.println("method1: " + n + "\t" + n2);
}
// 3. 파라미터 x 리턴값 o
// public 리턴값의데이터타입 method2() {
// System.out.println("method2");
// return 값;
// }
public int method2() {
System.out.println("method2");
return 100;
}
public String method3() {
System.out.println("method2");
return "홍길동";
}
// 4. 파라미터 o 리턴값 o
public int sum(int n, int n2) {
return n + n2;
}
}
package exam09_클래스4_method;
public class TestUtil {
public static void main(String[] args) {
Util u = new Util();
// 1. 파라미터 x 리턴값 x
u.method1();
// 2. 파라미터 o 리턴값 x
// 오버로딩 메서드 ( 인자리스트가 다르다면 하나의 메서드명으로 여러번 사용가능)
u.method1(10);
u.method1("홍길동");
u.method1("홍길동",10);
// 3. 파라미터 x 리턴값 o
int result = u.method2();
System.out.println(result);
String result2 = u.method3();
System.out.println(result2);
// 4. 파라미터 o 리턴값 o
int result3 = u.sum(10, 20);
System.out.println("n + n2: " + result3);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package exam09_클래스4_method2;
public class CatMethod {
// private 로 지정하면 외부클래스에서 접근이 불가능
private String name;
private int age;
private String gender;
// 생성자: private된 변수를 초기화하자.
// 기본생성자는 무조건 작성하자.
public CatMethod() {
}
// 오버로딩 생성자
public CatMethod(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// 메서드
// 이름변경하는 메서드: 파라미터 o 리턴값 x ( 7일차정리 메서드형식 (나) 참고 )
public void setName(String name) {
this.name = name;
}
// 나이변경하는 메서드
public void setAge(int age) {
this.age = age;
}
// 성별변경하는 메서드
public void setGender(String gender) {
this.gender = gender;
}
// 이름조회하는 메서드: 파라미터 x 리턴값 o ( 메서드형식 (다) 참고 )
public String getName() {
return this.name;
}
// 나이조회하는 메서드
public int getAge() {
return this.age;
}
//성별조회하는 메서드
public String getGender() {
return this.gender;
}
}
package exam09_클래스4_method2;
public class TestCat {
public static void main(String[] args) {
// 야옹이 2 암컷
CatMethod c1 = new CatMethod("야옹이", 2, "암컷");
// 값 변경 ==> set 메서드, setter 메서드라고 부른다.
// 메서드명: 'set변수명' 권장, 카멜표기법(camel)
c1.setName("망치");
c1.setGender("수컷");
// 값 조회 ==> get 메서드, getter 메서드라고 부른다.
// 메서드명: 'get변수명' 권장, 카멜표기법(camel)
String name = c1.getName();
int age = c1.getAge();
String gender = c1.getGender();
System.out.printf("이름: %s, 나이: %d, 성별: %s \n",
name,age,gender);
System.out.printf("이름: %s, 나이: %d, 성별: %s \n",
c1.getName(),c1.getAge(),c1.getGender());
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package exam09_클래스4_method2;
public class Dog {
// 변수
private String name;
private int age;
private String gender;
// 생성자
public Dog() {
}
public Dog(String name, int age, String gender) {
this.name = name;
// age 유효성 체크하기
if (age < 20) {
this.age = age;
} else {
System.out.println("age 값을 확인해주세요.");
}
this.gender = gender;
}
// 메서드 (setter & getter)
public int getAge() {
return age;
}
public void setAge(int age) {
// age 유효성 체크하기
if (age < 20) {
this.age = age;
} else {
System.out.println("age 값을 확인해주세요.");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
package exam09_클래스4_method2;
public class TestDog {
public static void main(String[] args) {
// 망치 2 수컷
Dog d1 = new Dog("망치",2000,"수컷");
// 나이수정
d1.setAge(1000);
// 조회
String name = d1.getName();
int age = d1.getAge();
String gender = d1.getGender();
System.out.printf("이름: %s, 나이: %d, 성별: %s \n",
name,age,gender);
}
}
package exam09_클래스4_method2;
public class Dog2 {
// 변수
private String name;
private int age;
private String gender;
// 생성자
public Dog2() {
}
public Dog2(String name, int age, String gender) {
this.name = name;
// age 유효성 체크하기
if (ageCheck(age)) {
this.age = age;
} else {
System.out.println("age 값을 확인해주세요.");
}
this.gender = gender;
}
// 메서드 (setter & getter)
public int getAge() {
return age;
}
public void setAge(int age) {
// age 유효성 체크하기
if (ageCheck(age)) { // this.ageCheck(age)
this.age = age;
} else {
System.out.println("age 값을 확인해주세요.");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
///////////////////////////////////////////
// age 값의 유효성 체크하는 메서드 ////////////////
///////////////////////////////////////////
public boolean ageCheck(int age) {
if(age < 20) {
return true;
} else {
return false;
}
}
public boolean ageCheck2(int age) {
return age < 20;
}
public boolean ageCheck3(int age) {
boolean result = false;
if(age < 20) {
result = true;
}
return result;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package exam09_클래스4_method3;
class Test {
int num;
public Test(int num) {
this.num = num;
}
}// end Test
public class TestMain {
// 파라미터에 전달되는 값이 기본형인 경우에는 메서드내에서
// 전달된 값을 변경해도 원본값은 변경이 안된다.
public static void method1(int x) {
// 값 변경
x = 20;
}
// 파라미터에 전달되는 값이 참조형인 경우에는 메서드내에서
// 전달된 값을 변경하면 원본값도 변경이 된다.
//Test -> 참조형, String -> 참조형
// Test 도 class 이기때문
public static void method2(Test t) {
// 값 변경
t.num = 200;
}
public static void main(String[] args) {
// 기본형
int a = 10;
System.out.println("기본형 메서드 호출전: " + a); // 10
method1(a); // method1 에 a 변수가 가진 값(10)을 전달 ==> call by value
System.out.println("기본형 메서드 호출후: " + a); // 10
// 참조형
Test b = new Test(100);
System.out.println("기본형 메서드 호출전: " + b.num); // 100
method2(b); // method2 에 b 변수가 가진 값(주소값)을 전달 ==> call by reference
System.out.println("기본형 메서드 호출후: " + b.num); // 200
}
}
'Programming > JAVA(eclipse)' 카테고리의 다른 글
java 7일차_ 03. import & package (+ UML ) (0) | 2024.03.18 |
---|---|
java 7일차 _02.static (0) | 2024.03.18 |
java 7일차 _ 6일차정리 (0) | 2024.03.18 |
java 6일차_ 02. 메서드 (0) | 2024.03.15 |
java 6일차 _01. 생성자(3) 생성자를 좀더 쉽게 생성 (0) | 2024.03.15 |