JAVA
1. 메서드(method)
메서드
메서드란 클래스 안에서 특정 기능을 수행하기 위해 코드들을 따로 하나의 블록으로 묶어 놓은 집합을 말합니다.
필요에 따라 이 집합을 호출해 사용할 수 있습니다.
메서드를 구현함으로써 같은 내용의 코드를 반복적으로 사용하는 것을 피할 수 있습니다.
즉, 반복 되는 문장들을 묶어서 메서드로 작성해 놓으면 필요할 때마다 재사용이 가능하며 중복된 코드를 제거할 수
있습니다. 이것이 메서드를 사용하는 이유 중 하나이기도 합니다.
이렇게 메서드처럼 코드들의 집합을 따로 분리하는 것을 "모듈화"라고 부르기도 하는데, 모듈화는 코드를 읽을 때
가독성이 좋으며, 프로그램을 수정할 때 더욱 빠르고 쉽게 수정할 수 있습니다.
메서드 선언
메서드는 크게 선언부(signature)와 실행 영역(boby)으로 구성되어 있습니다.
메서드 선언 방법은 다음과 같습니다.
접근제한자 반환타입 메서드이름(){
//기능 수행 코드
}
- 접근 제한자(제어자, access modifier) : 변수와 마찬가지로 해당 메서드에 접근할 수 있는 범위를 결정합니다.
- 반환 타입(return type) : 메서드를 호출하면 메서드는 블록 안에 있는 코드들을 실행한 후 결과값을 반환하는데, 어떤 타입으로 반활할 것인지 미리 정해줍니다. 반환값이 없는 경우에는 반환 타입으로 'void'를 사용합니다.
- 메서드 이름 : 변수처럼 이름을 가지고, 메서드를 호출할 때 사용합니다.
접근 제한자는 클래스/메서드/필드에 대한 접근을 어느 범위까지 제한하느냐에 대한 지시어입니다.
메서드를 작성할 때는 하나의 메서드에 하나의 기능만을 수행하도록 작성하는 것이 좋습니다. 또한 메서드의
이름만으로도 메서드의 기능을 쉽게 알 수 있도록 설정합니다.
메서드는 클래스 안에 선언하고 정의 할 수도 있습니다. 정의할 수 있는 클래스가 정해져 있는 것이 아니라,
모든 클래스에서 정의할 수 있으며, 해당 메서드를 호출해 사용할 수 있습니다.
public static void main(String[] args){
public : 모든 클래스에서 접근 할 수 있다
static : 프로그램 시작과 동시에 메모리에 올라가 있다
void : 반환할 것이 없다
}
main 메서드가 static으로 프로그램 시작과 함께 메모리에 올라가 있습니다 따라서 main 안에 메서드를 호출하기 위해서는
호출하려는 메서드가 메모리에 올라가 있어야 합니다.
다음과 같이 메서드를 메모리에 올리는 방법을 두 가지로 분류할 수 있습니다.
라이브러리 클래스에 있는 메서드
- 인스턴스 메서드 : 객체를 생성함과 동시에 객체의 멤버(필드, 메서드)들이 메모리에 올라갑니다. 따라서, 객체를 생성한
후 사용할 수 있습니다.
- 정적 메서드 : 프러그램 시작과 동시에 메모리에 자동으로 올라가기 때문에 바로 사용할 수 있습니다.
실행 클래스에 있는 메서드
- 객체를 생성할 방법이 없기 때문에, 메서드가 무조건 static(정적 메서드)으로 선언되어야 합니다.
메서드 호출
main 메서드에서 멤서드를 호출하는 것과 같이 메서드는 또 다른 메서드에서 호출되어 사용하기도 합니다.
메서드가 있는 클래스 참조변수 = new 클래스();
참조변수.메서드 이름();
(단, 같은 클래스에 있는 메서드를 호출할 때는 메서드 이름만 호출합니다.)
메서드는 클래스 안에서 선언되므로 메서드를 사용하기 위해서는 해당 클래스의 객체부터 생성해야 합니다.
예를 들어 Book이라는 클래스에 선언된 read()라는 메서드를 호출하기 위해서는 다음과 같이 작성합니다.
Book b = new Book();
b.read();
메서드는 같은 클래스에 있는 필드를 이용할 수도 있으며, 하나의 클래스에 2개 이상의 메서드를 선언하는
것도 가능합니다.
2. 매개변수와 return
메개변수
특정 기능을 수행하기 위한 메서드는 기능을 수행할 때 사용할 인수를 받을 수 있습니다. 그 인수를 "매개변수"라고
부릅니다. 메서드를 정의할 때, 소괄호( ) 안에 어떤 형태로 인수를 받을지 작성할 수 있습니다.
접근제한자 반환타입 메서드이름(자료형 변수명){
기능을 수행할 코드
}
매개변수는 다음과 같이 '매개변수의 자료형'과 '매개 변수명'으로 선언할 수 있습니다.
호출할 때 전달받을 변수의 자료형, 전달받은 매개변수를 메서드 안에서 사용할 때 이름
메서드를 호출할 때 전달해 줄 변수의 자료형을 명시하고, 그 변수를 메거드 안에서 사용할 때 담아서 사용할 변수 이름을
작성합니다. 쉽게 말해 메서드를 호출할 때 같이 전달받을 변수를 메서드 안에서 사용할 지역변수에 담는 것입니다.
매개변수는 개수의 제한이 없습니다. 2개 이상의 매개변수를 정의할 때 콤마(,)를 이용해서 나열합니다.
2개 이상의 매개변수를 받아야 할 때, 반드시 같은 자료형을 사용해야 하는 것은 아닙니다.
return
메서드를 호출할 때 매개변수를 전달해 준 것처럼, 필요에 따라 메서드로부터 실행한 결과값을 되돌려 받을 수 도 있습니다
이것을 "리턴값(return value)"이라고 부릅니다.
메서드 기본 형태에서 반환 타입(return type)은 메서드를 호출했을 때 결과값으로 돌려받을 데이터의 자료형을
명시합니다. 결과값을 정수로 돌려받는다면 반환 타입을 정수타입을 작성합니다.
메서드가 반환할 값이 있다면 반드시 return 구문을 통해서 결과값을 반환해 주고 메서드를 종료해야 합니다.
접근제한자 반환타입 메서드이름(){
기능을 수행할 코드들
...
return 결과값;
}
매개변수와 마찬가지로 리턴값의 자료형은 제한이 없습니다. 자바에서 사용하는 모든 자료형을 반환타입으로
사용할 수 있습니다. 자료형의 크기에 따라 실제로 반환할 리턴값보다 작은 자료형으로 자동 형변환 되어
반환하는 것도 가능합니다. 이때, 결과값을 저장할 변수의 자료형은 결과값의 자료형과 동일하거나 자동으로 형 변환이
될 수 있는 자료형이어야 합니다. 리턴 뒤에 쓰는 코드는 컴파일 에러가 발생 합니다.
리턴값이 없는 메서드의 경우, void를 사용합니다. 이 경우에는 return문으로 결과값을 반환해 주지 않습니다.
단, 메서드를 종료하기 위해서 반환값이 없는 return문을 사용할 수 있습니다.
while문을 빠져나갈 때 break를 사용했던 것처럼, 메서드를 빠져나가기 위해 return을 사용합니다.
3. getter와 setter 메서드
객체 밖에서 필드에 마음대로 접근할 수 있고 값을 변결할 수 있다면, 문제가 생길 가능성이 있습니다.
이런 문제를 예방하기 위해 객체 지향 프로그래밍에서는 메서드를 통해서 필드의 값을 불러오고, 필드의
값을 변경하는 방법을 이용합니다. 즉, 필드를 사용하려면 메서드를 이용하도록 설계할 수 있습니다.
이 방법의 장점
- 필드를 보호할 수 있습니다.
- 메서드에서 필드에 들어갈 값을 검증한 후 필드에 대입할 수 있습니다
- 외부에서 사용할 필드의 값을 정제한 후 값을 제공할 수 있습니다
setter 메서드
일반적으로 setter메서드를 사용할 때는 필드의 값을 객체 외부에서 직접 넣지 못하도록 필드에 접근을 제한합니다.
필드가 선언되어 있는 클래스에서만 접근 가능한 필드를 private하다고 표현할 수 있으며, private 필드는
다음과 같이 필드 앞에 private을 작성하여 선언합니다.
private int age;
접근 제한자 중 가장 좁은 범위로 접근을 제한하는 지시어가 private입니다.
getter 메서드
private 필드를 객체 외부에서 값을 불러오기 위해 구현하는 메서드를 'getter'라고 합니다.
private 필드는 객체 외부에서는 접근이 불가능하지만, 필드가 선언된 클래스에서는 어디서든 접근할 수 있습니다.
따라서 메서드를 통해서 값을 전달해 줄 수 있습니다.
응용문제
1. 다음 빈칸에 알맞은 단어를 작성해 보세요.
- ㅁㅁㅁ(이)란, 클래스 안에서 특정 기능을 수행하기 위해 코드를 하나의 블록으로 묶어 놓은 집합을 말합니다.
- 코드를 따로 분리하는 것을 일종의 ㅁㅁㅁ(이)라고 부르는데, 이는 가독성과 유지 보수의 효율성을 높여줍니다.
정답 : 메서드, 모듈화
2. 다음 코드를 실행했을 때 콘솔창에 출력되는 결과는 무엇입니까 ?
package section08;
public class PRACTICE_08_02{
public static void main(String[] args){
Person p = new PerSon();
for(int i=0; i<3; i++){
p.printHello();
}
}
}
class Person{
void printHello(){
System.out.println("Hello");
}
}
실행 결과 :
Hello
Hello
Hello
3. 다음과 같은 결과가 나오도록 빈칸에 알맞은 코드를 작성해 보세요.
package section08;
public class PRACTICE_08_03{
public static void main(String[] args){
Student stu = new Student();
stu.introduce("철수");
stu.introduce("영희");
}
}
class Student{
void introduce(){
}
}
실행 결과 :
안녕하세요, 제 이름은 철수 입니다.
안녕하세요, 제 이름은 영희 입니다.
=================================================================================
class Student{
void introduce(String name){
System.out.println("안녕하세요, 제 이름은 "+name+"입니다.");
}
}
4. 다음 코드는 컴파일 에러가 발생합니다. 그 이유는 무엇이며, 어떻게 해결해야 할까요 ?
package section08;
public class PRACTICE_08_04{
public static void main(String[] args){
Calc c = new Calc();
int result = c.plus(1,2);
System.out.println("반환받은 결과는 "+result+"입니다.");
}
}
class Calc{
int plus(int num1, int num2){
int res = num1 + num2;
return res;
}
System.out.println("계산 결과는 "+res+"입니다.");
}
에러 이유 : 16번 줄이 메서드 밖에 있어서
해결 : return 앞줄로 이동 시킨다
5. 다음과 같은 결과가 나오도록 코드를 수정해 보세요.
package08;
class Person{
private int age;
void setAge(int num){
age = num;
}
int getAge(){
return age;
}
public class PRACTICE_08_05{
public static void main(String[] args){
Person lee = new Person();
lee.setAge(-10);
lee.setAge(30);
System.out.println("lee의 나이는 "+lee.getAge()+"세 입니다.");
}
}
실행 결과 :
잘못된 수를 입력하셨습니다ㅏ. 1이상의 값으로 설정하세요
lee의 나이는 30세 입니다.
================================================================================
class Person{
private int age;
void setAge(int num){
if(num<=0){
System.out.println("잘못된 수를 입력하셨습니다. 1이상의 값으로 설정하세요.");
return;
}
eles{
age = num;
}
age = num;
}
int getAge(){
return age;
}
}
public class PRACTICE_08_05{
public static void main(String[] args){
Person lee = new Person();
lee.setAge(-10);
lee.setAge(30);
System.out.println("lee의 나이는 "+lee.getAge()+"세 입니다.");
}
}
'javaboiii의 JAVA > JAVA 요약정리(멘토씨리즈)' 카테고리의 다른 글
JAVA -10)상속 (0) | 2024.07.21 |
---|---|
JAVA -9)생성자 (2) | 2024.07.20 |
JAVA -7)클래스(Class) (0) | 2024.07.18 |
JAVA -6)배열 (0) | 2024.07.17 |
JAVA - 5)제어문2 (1) | 2024.07.16 |