메소드란 ?
클래스 안에서 특정 기능을 수행하기 위해 코드들을 따로 하나의 블록으로 묶어 놓은 집합을 말한다.
메소드의 장점
- 같은 내용의 코드를 반복적으로 사용하는 것을 피할 수 있다.
- 반복되는 문장들을 묶어서 메소드로 작성해 놓으면 필요할 때마다 재사용이 가능하며 중복된 코드를 제거할 수 있다.
이렇게 메소드처럼 코드들의 집합을 따로 분리하는 것을 "모듈화"라고 한다.
모듈화의 장점
- 코드를 읽을 떄 가독성이 좋다.
- 프로그램을 수정할 때 빠르고 쉽게 수정할 수 있다.
메소드의 선언 방법
접근 제한자 반환 타입 메서드 이름() {
// 실행할 문장;
}
- 접근제한자 (access modifier) : 변수와 마찬가지로 해당 메소드를 접근할 수 있는 범위를 결정한다.
- 반환 타입 (return type) : 메소드를 호출하면 메소드는 블록 안에 있는 코드들을 실행한 후 결과값을 반환하는데, 어떤 타입으로 반환할 것인지 타입을 미리 정해준다. 반환값이 없는 경우에는 반환 타입으로 'void'를 사용한다.
- 메소드 이름 : 변수처럼 이름이 있고, 메소드를 호출할 때 사용한다.
메소드의 선언 및 호출 방법
public class Test01 {
public static void main(String[] args) {
printHello(); // main() 에서 printHello() 메소드 호출
}
static void printHello() { // static : 프로그램 시작과 동시에 메모리에 올라가 있는 특징
// 따라서, 바로 사용 가능.
System.out.println("안녕하세요");
System.out.println("만나서 반갑습니다.");
}
}
다른 클래스에 있는 메소드에 접근하고 싶을 경우에는 아래와 같이 사용합니다.
메소드가 있는 클래스 참조 변수 = new 클래스(); // 다른 클래스 객체 생성
참조 변수.메소드 이름(); // 객체.메소드명();
// Book이라는 클래스가 있고, 그 안에 read()라는 메소드가 있을 시 사용법
Book b = new Book();
b.read();
2개 이상의 메소드 선언 및 호출 방법
public class Jogger {
String name;
void run() { // 메소드 1
System.out.println("run run run!");
}
void sayName() { // 메소드 2
System.out.println("제 이름은 " + name + "입니다.");
}
}
public class Test01 {
public static void main(String[] args) {
Jogger jogger = new Jogger(); // Jogger 클래스 객체 생성
jogger.name = "홍길동"; // Jogger 클래스의 name을 홍길동으로 초기화
jogger.sayName(); // Jogger 클래스의 sayName() 메소드 호출
jogger.run(); // Jogger 클래스의 run() 메소드 호출
}
}
매개변수
메소드의 기능을 수행할 때 사용할 "인수"를 매개변수라고 한다. 메소드를 선언할 때 괄호 () 안에 어떤 형태로 받을지 작성할 수 있다 .
매개 변수가 하나일 경우
접근 제한자 반환 타입 메소드 이름(자료형 변수명) {
// 실행할 문장
}
매개변수가 2개 이상일 경우
접근 제한자 반환 타입 메소드 이름(자료형 변수명1, 자료형 변수명2, ...) {
// 수행할 문장
}
매개 변수 하나가 있는 메소드 선언 및 사용
public class Book {
void count(int bookNum) { // 매개변수가 하나인 메소드
System.out.println("책은 " + bookNum + "권 입니다.");
}
}
public class Test01 {
public static void main(String[] args) {
Book myBook = new Book(); // Book 객체 생성
myBook.count(3); // myBook 클래스의 count 메소드 호출
}
}
// 실행 결과
// 책은 3권입니다.
getter와 setter 메소드
객체 밖에서 필드에 마음대로 접근하여 값을 변경할 수 있게 된다면 문제가 발생할 수 있기 때문에 우리는 getter와 setter를 사용한다. 객체 지향 프로그래밍에서는 메소드를 통해서 필드의 값을 불러오고, 필드의 값을 변경하는 값을 변경하는 방법을 이용한다.
getter와 setter의 장점
- 필드를 보호할 수 있다.
- 메소드에서 필드에 들어갈 값을 검증한 후 필드에 대입할 수 있다.
- 외부에서 사용할 필드의 값을 정제한 후 값을 제공할 수 있다.
setter의 선언 방법
// 나이의 값을 1 이상으로만 받고 싶을 경우 코드
class Test01 {
private int age;
void setAge(int num) {
if(num <= 0) { // 유효성 검사 (값이 잘못 넣어졌을 경우)
System.out.println("잘못된 수를 입력하셨습니다. 1 이상의 값으로 설정하세요.");
return;
} else {
age = num;
}
}
}
setAge 메소드를 이용해 age 값을 저장한다면, 필드에 값을 저장하기 전에 검증을 먼저 할 수 있다. 이런 메소드를 setter 메소드라고 한다. 따라서 필드에 선언된 age도 객체 외부에서 직접 값 변경을 하지 못하도록 필드에 접근을 제한하기 위해 private을 붙여 선언한다.
private로 age를 선언하게 되면서 값을 불러오는 것도 불가능해졌기 때문에 외부에서 값을 불러올 수 있는 메소드를 선언 해주어야 하는데 그것을 getter라고 부른다.
getter의 선언 방법
void getAge() {
return age;
}
이런식으로 getter와 setter는 한번에 같이 선언하게 된다.
getter와 setter의 선언과 사용 방법
public class Person {
private int age; // age는 Person 클래스에서만 접근이 가능함.
void setAge(int num) {
if(num <= 0) {
System.out.println("잘못된 수를 입력하셨습니다. 1이상의 값으로 설정하세요.");
return;
} else {
age = num;
}
}
int getAge() {
return age;
}
}
public class Test01 {
public static void main(String[] args) {
Person kim = new Person();
kim.setAge(-30); // 잘못된 값
kim.setAge(30);
System.out.println("kim의 나이는 " + kim.age() + "세입니다.");
}
}
// 출력 결과
// 잘못된 수를 입력하셨습니다. 1 이상의 값으로 설정하세요.
// kim의 나이는 30세입니다.
getter & setter은 private 필드의 값을 대입하는 방법으로 setter 메소드를 사용하고, 반대로 객체 외부에서 private 필드의 값을 구하기 위해 getter 메소드를 사용한다.
'JAVA > JAVA 정리' 카테고리의 다른 글
[JAVA] 상속 (0) | 2023.05.25 |
---|---|
[JAVA] 생성자 (0) | 2023.05.24 |
[JAVA] 클래스 (0) | 2023.05.22 |
[JAVA] 배열 (0) | 2023.05.21 |
[JAVA] 반복문(for문, while문, do~while문) (0) | 2023.05.17 |