티스토리 뷰
1. 메소드 개요
1-1. 메소드(method)란?
💡어떤 특정 작업을 수행하기 위한 명령문의 집합
자세한 메소드 사용법은 객체 부분에서 다룬다! 지금은 호출 흐름에 대해 이해!!
1-2. 메소드의 사용 목적
- 중복되는 코드를 메소드로 만들어 코드의 반복 사용을 피할 수 있다.
- 코드의 가독성이 좋아진다.
- 기능의 변경이 필요한 경우 메소드 부분만 수정하면 되기 때문에, 손쉬운 유지보수가 가능하다.
1-3. 메소드 선언
접근제어자 반환타입 메소드이름 (매개변수 목록) {
// 실행할 코드
// 반환타입이 있을경우 반환타입에 맞게 return 작성
// 반환타입이 void인 경우 생략
return ...;
}
- 접근 제어자 : 메소드에 접근할 수 있는 범위
- public : 어디서나 접근 가능
- protected : 상속관계이거나 같은 패키지에서 접근 가능
- default(생략가능) : 같은 패키지에서 접근 가능
- private : 같은 클래스 내부에서만 접근 가능
- 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입
- void : 리턴값 없음
- 기본 변수 자료형 : int, float, 등등
- 오브젝트형 : String, 이외 사용자 정의타입
- 메소드 이름 : 메소드를 호출하기 위한 이름
- 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들
- 실행할 코드 : 메소드의 기능을 수행하는 코드
1-4. 메소드 호출
- 미리 정의한 메소드는 참조연산자(.)를 통해 호출할 수 있다.
public class Application {
public static void main(String[] args) {
Application app = new Application();
//레퍼런스변수이름.메소드이름();
app.methodA();
//레퍼런스변수이름.메소드이름(매개변수1, 매개변수2, ...)
app.methodB(10);
}
public void methodA(){
System.out.println("method A 호출됨....");
}
public void methodB(int x) {
System.out.println("method B 로 " + x + " 값 넘어옴...");
}
}
// 실행 결과
method A 호출됨....
method B 로 10 값 넘어옴...
1-5. 메소드 호출 흐름
package com.ohgiraffers.section01.method;
public class Application1 {
public static void main(String[] args) {
/* 수업목표. 메소드의 호출 흐름에 대해 이해할 수 있다. */ // 스택 구조!
System.out.println("main() 시작함...");
methodA();
System.out.println("main() 종료됨...");
}
public static void methodA() {
System.out.println("methodA() 호출됨...");
methodB();
System.out.println("methodA() 종료됨...");
}
public static void methodB() {
System.out.println("methodB() 호출됨...");
methodC();
System.out.println("methodB() 종료됨...");
}
public static void methodC() {
System.out.println("methodC() 호출됨...");
System.out.println("methodC() 종료됨...");
}
}
// 실행 결과
main() 시작함...
methodA() 호출됨...
methodB() 호출됨...
methodC() 호출됨...
methodC() 종료됨...
methodB() 종료됨...
methodA() 종료됨...
main() 종료됨...
package com.ohgiraffers.section01.method;
public class Application2 {
public static void main(String[] args) {
System.out.println("main() 시작됨...");
/* 설명. static이 없는 메소드(non-static method)는 해당 클래스를 인지시킨 후 접근해 호출한다. */
Application2 app = new Application2(); // Application2 클래스 전체를 인지해줘~
app.methodA(); // 인지된 것 호출
app.methodB();
app.methodC();
System.out.println("main() 종료됨...");
}
public void methodA() {
System.out.println("methodA() 호출됨...");
System.out.println("methodA() 종료됨...");
}
public void methodB() {
System.out.println("methodB() 호출됨...");
System.out.println("methodB() 종료됨...");
}
public void methodC() {
System.out.println("methodC() 호출됨...");
System.out.println("methodC() 종료됨...");
}
}
// 실행 결과
main() 시작됨...
methodA() 호출됨...
methodA() 종료됨...
methodB() 호출됨...
methodB() 종료됨...
methodC() 호출됨...
methodC() 종료됨...
main() 종료됨...
1-6. 전달인자(argument)와 매개변수(parameter)를 이용한 메소드 호출
- 변수의 종류
- 지역변수
- 매개변수
- 전역변수(필드)
- 클래스(static)변수
package com.ohgiraffers.section01.method;
import java.awt.desktop.AppForegroundListener;
public class Application3 {
static int global = 10; // 전역변수이자 클래스 변수(static 존재)
// public 없으면??? -> 클래스 내에서만 사용! import 불가.
// global 여러 개 쓰고 싶으면??? -> main 클래스 밖에 쓰면 전역변수!
/* 수업목표. 메소드 전달인자(argument)와 매개변수(parameter)에 대해 이해하고 메소드 호출 시 활용할 수 있다. */
public static void main(String[] args) {
/* 필기.
* 변수를 선언한 위치에 따라 구분할 수도 있다.
* 1. 지역변수
* 2. 전역변수
* 3. 매개변수
* */
int local = 20;
System.out.println("global 출력: " + global);
System.out.println("local 출력: " + local);
/* 설명. testMethod에 나이를 주고 출력하기 */
Application3 app3 = new Application3();
app3.testMethod(13); // 전달인자 13을 주면서 호출!
app3.testMethod(19);
app3.testMethod(15);
app3.testMethod('a');
app3.testMethod((int)12.34);
app3.testMethod(3 * 6);
}
/* 설명. 정수형 나이를 주면 문자열을 출력해주는 기능이 있는 메소드 */
public void testMethod(int age) {
System.out.println("당신의 나이는 " + age + "세 입니다.");
}
}
// 실행 결과
global 출력: 10
local 출력: 20
당신의 나이는 13세 입니다.
당신의 나이는 19세 입니다.
당신의 나이는 15세 입니다.
당신의 나이는 97세 입니다.
당신의 나이는 12세 입니다.
당신의 나이는 18세 입니다.
package com.ohgiraffers.section01.method;
public class Application4 {
public static void main(String[] args) {
/* 수업목표. 여러 개의 전달인자를 이용한 메소드 호출을 할 수 있다. */
Application4 app4 = new Application4();
app4.testMethod("홍길동", 20, '남');
String name1 = "유관순";
int age = 20;
char gender = '여';
app4.testMethod(name1, age, gender); // 서로 다른 지역이라 name 맞출 필요없지만 맞추는게 관례?
}
public void testMethod(String name, int age, final char gender) {
System.out.println("당신의 이름은 " + name + "이고, 나이는 " + age + "세 이며, 성별은 " + gender + "입니다.");
}
}
// 실행 결과
당신의 이름은 홍길동이고, 나이는 20세 이며, 성별은 남입니다.
당신의 이름은 유관순이고, 나이는 20세 이며, 성별은 여입니다.
1-7. 메소드 리턴
- 메소드는 항상 마지막에 return명령어가 존재한다.
- return은 자신을 호출한 구문으로 복귀하는 것을 의미한다.
- 복귀를 할 때 그냥 복귀를 할 수도 있지만, 값을 가지고 복귀할 수 도 있다. 이 때 가지고 가는 값을 리턴값 이라고 한다.
- return값을 반환받기 위해서는 메소드 선언부에 리턴 타입을 명시해 주어야 한다.
- void는 아무 반환값도 가지지 않겠다는 리턴타입에 사용할 수 있는 키워드이다.
- 반환값이 없는 경우 return구문은 생략해도 컴파일러가 자동으로 추가해주지만, 반환값이 있는 경우는 return구문을 반드시 명시적으로 작성해야 한다. 또한 메소드 선언부에 선언한 리턴타입 반환값의 자료형은 반드시 일치해야 한다.
package com.ohgiraffers.section01.method;
public class Application5 {
public static void main(String[] args) {
/* 수업목표. 메소드 리턴에 대해 이해할 수 있다. */
Application5 app5 = new Application5();
app5.testMethod();
}
public void testMethod() {
System.out.println("testMethod() 동작 확인...");
/* 설명. 메소드를 호출한 곳으로 돌아가기 위해 return;을 작성하며 안적어도 자동 작성된다. */
return;
}
}
// 실행 결과
testMethod() 동작 확인...
package com.ohgiraffers.section01.method;
public class Application6 {
public static void main(String[] args) {
/* 수업목표. 반환값이 있는 메소드를 작성할 수 있다. */
String result = testMethod();
System.out.println("result = " + result);
/* 설명. 따로 굳이 변수에 담을 필요가 없다면 반환값을 바로 활용하는 것도 가능하다. */
System.out.println("result2 = " + testMethod());
}
public static String testMethod() {
System.out.println("test() 메소드 실행함...");
return "test"; // 메소드를 호출한 곳에 String 리터럴 값을 반환
}
}
// 실행 결과
test() 메소드 실행함...
result = test
test() 메소드 실행함...
result2 = test
2. 메소드 활용
package com.ohgiraffers.section01.method;
public class Calculator {
// 모듈화(modulation) : 관련있는 것끼리 뭉쳐놓는다.
public int plusTwoNumbers(int first, int second) {
return first + second;
}
public int subTwoNumbers(int first, int second) {
return first - second;
}
public int multiTwoNumbers(int first, int second) {
return first * second;
}
public int divideTwoNumbers(int first, int second) {
return first / second;
}
public int minNumbersOf(int first, int second) {
return (first > second) ? second : first;
}
public static int maxNumbersOf(int first, int second) {
return (first > second) ? first : second;
}
}
package com.ohgiraffers.section01.method;
public class Application7 {
public static void main(String[] args) {
/* 수업목표. 다른 클래스에 작성한 메소드를 활용할 수 있다. */
int first = 100;
int second = 50;
Calculator cal = new Calculator();
/* 설명. 덧셈 */
System.out.println("두 수의 합은? " + cal.plusTwoNumbers(first, second));
/* 설명. 최소값 */
System.out.println("두 수 중 작은 값은? " + cal.minNumbersOf(first, second));
/* 설명. 최대값 */
System.out.println("두 수 중 큰 값은?(static 메소드) " + Calculator.maxNumbersOf(first, second));
}
}
// 실행 결과
두 수의 합은? 150
두 수 중 작은 값은? 50
두 수 중 큰 값은?(static 메소드) 100
'한화시스템 > 백엔드' 카테고리의 다른 글
[BE] JAVA_API (0) | 2024.07.13 |
---|---|
[BE] JAVA_패키지, 임포트 (0) | 2024.07.13 |
[BE] JAVA_연산자 (0) | 2024.07.13 |
[BE] JAVA_형변환 (0) | 2024.07.13 |
[BE] JAVA_오버플로우 (0) | 2024.07.13 |