리턴(return)문
리턴값이 있는 메소드
메소드 선언에 리턴 타입이 있는 메소드는 반드시 리턴문을 사용해서 리턴값을 지정해야 함
return문이 없다면 컴파일 에러가 발생함 / return문이 실행되면 메소드는 즉시 종료
return 리턴값;
return문의 리턴값은 리턴 타입이거나 리턴 타입으로 변환될 수 있어야 한다.
int인 plus()메소드에서는 byte, short, int의 값이 리턴되어도 상관 없음 ( 자동 타입 변환 )
자동 타입 변환
int plus( int x, int y ) {
int result = x + y;
return result;
}
int plus( int x, int y ) {
byte result = (byte) (x + y);
return result;
}
return문 이후의 실행문은 결코 실행되지 않음
컴파일 에러
int plus( int x, int y ) {
int result = x + y;
return result;
System.out.println(result); // 컴파일 에러
}
밑에 같은 경우에는 컴파일 에러 발생하지 않음
if(gas == 0) {
System.out.println("gas가 없습니다.");
return false;
}
System.out.println("gas가 있습니다.");
return true;
리턴값이 없는 메소드 : void
리턴값이 없는 메소드는 리턴 타입으로 void를 사용
void로 선언된 메소드에서도 return문을 사용할 수 있음
이 경우 리턴값을 지정하는 것이 아니라 메소드 실행을 강제 종료
return;
void run() {
while(true) {
if(gas > 0) {
System.out.println("달립니다.(gas잔량 : " + gas +")");
gas -= 1;
}else {
System.out.println("멈춥니다.(gas잔량 : " + gas +")");
return; // run() 메소드 실행 종료
}
}
}
실습 예제
package sec031.exam03;
public class Car {
// gas 예제안보고 만들어 보기
// 선언
int gas;
int speed;
void keyTurnOn() {
System.out.println("키를 돌립니다.");
}
//1. 남은 가스를 체크
boolean isLeftGas() {
if(gas > 0) {
return true;
}else {
return false;
}
}
//2. 달린다.
void run() {
while (true) {
for(int i=0; i<=gas; i++) {
speed += 10;
if(gas >= 1) {
gas -= 1;
System.out.println("달린다.(가스 잔량: " + gas +" )" );
System.out.println(speed);
}else {
System.out.println("멈춘다.");
System.out.println("가스를 충전해주세요.");
return;
}
}
}
}
}
package sec03.exam03;
public class CarEx {
// gas return 예제
// 호출
public static void main(String[] args) {
Car myCar = new Car();
myCar.setGas(5);// Car의 setGas() 메소드 호출
boolean gasState = myCar.isLeftGas();
if(gasState) {
System.out.println("출발합니다.");
myCar.run();
}
if(myCar.isLeftGas()) {
System.out.println("gas를 주입할 필요가 없습니다.");
}else {
System.out.println("gas를 주입하세요");
}
}
}
결과

메소드 호출
메소드는 클래스 내 . 외부의 호출에 의해 실행 됨
클래스 내부의 다른 메소드에서 호출할 경우 단순한 메소드 이름으로 호출
클래스 외부에서 호출할 경우 우선 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드 호출

객체 내부에서 호출
메소드가 매개변수를 가지고 있을 때에는 매개변수의 타입과 수에 맞게 매개값을 제공
메소드(매개값, ...);

리턴값이 있는 메소드를 호출하고 리턴값을 받고 싶다면 밑에 처럼 변수를 선언하고 리턴값을 대입
타입 변수 = 메소드(매개값, ...);

실습 예제 ( 호출 순서 )
package sec031.exam03;
public class Calculator {
//메서드 호출 순서
//선언
int plus(int x, int y) {
int result = x + y;
System.out.println("plus 실행 후 리턴값 : " + result);
return result;
}
double avg(int x , int y) {
double sum = plus(x, y);
double result = sum /2;
System.out.println("avg 실행 후 리턴값 : " + result);
return result;
}
void execute() {
System.out.println("execute");
double result = avg(7, 10);
println("실행결과: " + result);
}
void println(String messge) {
System.out.println("println");
System.out.println(messge);
}
}
package sec031.exam03;
public class CalculatorExample {
public static void main(String[] args) {
//메서드 호출 순서
//호출
Calculator mycalc = new Calculator();
mycalc.execute();
}
}
실행 순서 확인
execute
plus 실행 후 리턴값 : 17
avg 실행 후 리턴값 : 8.5
println
실행결과: 8.5
객체 외부에서 호출
외부 클래스에서 메소드를 호출하려면 클래스로부터 객체를 생성해야 함
메소드는 객체에 소속된 멤버이므로 객체가 존재하지 않으면 메소드도 존재하지 않기 때문에
클래스 참조변수 = new 클래스(매개값, ...);
객체가 생성되었다면 참조 변수와 함께 도트(.)연산자를 사용해서 메소드를 호출할 수 있음
참조변수.메소드(매개값, ...); <= 리턴값이 없거나, 있어도 리턴값을 받지 않을 경우
타입 변수 = 참조변수.메소드(매개값, ...); <= 리턴값이 있고, 리턴값을 받고 싶은 경우
실습 예제 ( gas, key, speed )
선언
package sec031.exam03;
public class Car {
// gas, key, speed
int gas;
int speed;
void keyTurnOn() {
System.out.println("키를 돌립니다.");
}
//1. 남은 가스를 체크
boolean isLeftGas() {
if(gas > 0) {
return true;
}else {
return false;
}
}
//2. 달린다.
void run() {
while (true) {
for(int i=0; i<=gas; i++) {
speed += 10;
if(gas >= 1) {
gas -= 1;
System.out.println("달린다.(가스 잔량: " + gas +" )" );
System.out.println(speed);
}else {
System.out.println("멈춘다.");
System.out.println("가스를 충전해주세요.");
return;
}
}
}
}
}
호출
package sec031.exam03;
public class CarEx {
// gas, key, speed
// 호출
public static void main(String[] args) {
Car myCar = new Car();
myCar.keyTurnOn();
myCar.gas = 11;
myCar.isLeftGas();
if (myCar.isLeftGas()) {
System.out.println("연료있다.");
System.out.println("출발합니다.");
}else {
System.out.println("연료없다.");
}
myCar.run();
}
}
결과

메소드 오버로딩
클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을 메소드 오버로딩이라고 함
하나의 메소드 이름으로 여러 기능을 담는다라고 생각하면 됨
메소드 오버로딩 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야 함 ( 매개순 )

메소드 오버로딩이 필요한 이유는 매개값을 다양하게 받아 처리할 수 있도록 하기 위해서
실습 예제
선언
package sec031.exam03;
public class Calculator2 {
// 메서드 오버로딩
// 선언
int divide(int x, int y) {
System.out.println("int");
return x / y;
}
double divide(double x, double y) {
System.out.println("double");
return x / y;
}
}
호출
package sec031.exam03;
public class CalEx2 {
// 메서드 오버로딩
// 호출
public static void main(String[] args) {
Calculator2 cal = new Calculator2();
System.out.println(cal.divide(10, 3));
System.out.println(cal.divide(10, 3.0));
// 자동 형변환 int => double
}
}
결과
int
3
double
3.3333333333333335
실습 예제 2 ( 사각형 )
선언
package sec03.exam03;
public class Square {
// 메소드 오버로딩 ( 선언 )
// 정사각형, 직사각형 넓이
// 정사각형의 넓이
double square(double width) {
return width * width;
}
// 직사각형의 넓이
double rectangle(double width, double height) {
return width * height;
}
}
호출
package sec03.exam03;
public class SquareEx {
// 메소드 오버로딩 ( 호출 )
// 정사각형, 직사각형 넓이
public static void main(String[] args) {
Square mySquare = new Square();
// 정사각형의 넓이 구하기
double result1 = mySquare.square(10);
// 직사각형의 넓이 구하기
double result2 = mySquare.rectangle(10, 20);
// 결과 출력
System.out.println("정사각형의 넓이 : " + result1);
System.out.println("직사각형의 넓이 : " + result2);
}
}
결과
정사각형의 넓이 : 100.0
직사각형의 넓이 : 200.0
실습 문제 풀어보기
login(), logout() 메소드 2개 선언 ( 매개값 id, pw가 true 일 경우에만 true 리턴, 그 외 false )
선언
package sec031.exam03;
public class MemberService {
//login, logout 메소드 활용 문제
//선언
String id;
String pw;
boolean login(String id, String pw) {
if(id.equals("hong") && pw.equals("12345"))
{
return true;
}else {
System.out.println("id, pw 불일치");
return false;
}
}
void logout (String id) {
System.out.println("로그아웃 되었습니다.");
}
}
호출
package sec031.exam03;
public class MemberEx {
public static void main(String[] args) {
//login, logout 메소드 활용 문제
//호출
MemberService memberService = new MemberService();
boolean result = memberService.login("hong", "12345");
if(result) {
System.out.println("로그인 되었습니다.");
memberService.logout("hong");
}else {
System.out.println("id 또는 pw가 올바르지 않습니다.");
}
}
}
결과
로그인 되었습니다.
로그아웃 되었습니다.
메소드 오버로딩 프린트 문제
선언
package sec031.exam03;
public class Printer {
// 메소드 오버로딩 문제
// 선언
int x;
void println() {
}
void println(int x) {
System.out.println(x);
}
void println(boolean x) {
System.out.println(x);
}
void println(double x) {
System.out.println(x);
}
void println(String x) {
System.out.println(x);
}
}
호출
package sec031.exam03;
public class PrinterEx {
// 메소드 오버로딩 문제
// 호출
public static void main(String[] args) {
Printer printer = new Printer();
printer.println(10);
printer.println(true);
printer.println(5.7);
printer.println("홍길동");
}
}
결과
10
true
5.7
홍길동
static 정적 멤버 실습
package sec031.exam03;
public class Aaa {
//static 예제 실습
int a1; // 필드
static int a2; // 정적(고정형) 필드
void println() {
System.out.println(a1);
System.out.println(a2);
}
static void sprintln() {
Aaa xx = new Aaa();
System.out.println(xx.a1);
//인스턴스 변수 사용불가
//사용할라면 객체 생성 필요
System.out.println(a2);
}
}
package sec031.exam03;
public class Bbb {
//static 예제 실습
int x = 100;
void println() {
System.out.println(x);
}
public static void main(String[] args) {
Bbb bbb = new Bbb();
System.out.println(bbb.x);
bbb.println();
}
}
우클릭 source => toString(), using 실습

package sec031.exam03;
public class Student {
//배열생성 toString() 자동
String name;
int kor;
int math;
int eng;
public Student(String name, int kor, int math, int eng) {
super();
this.name = name;
this.kor = kor;
this.math = math;
this.eng = eng;
}
@Override // "toString" 메서드는 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드
public String toString() {
return "Student [name=" + name + ", kor=" + kor + ", math=" + math + ", eng=" + eng + "]";
}
// 배열
public static void main(String[] args) {
// String[] arr = {"sdsadad"};
Student[] arr = new Student[3];
arr[0] = new Student("a", 12,23,34);
arr[1] = new Student("b", 56,73,84);
arr[2] = new Student("c", 89,29,100);
for(int i=0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
결과
Student [name=a, kor=12, math=23, eng=34]
Student [name=b, kor=56, math=73, eng=84]
Student [name=c, kor=89, math=29, eng=100]
'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글
2023-06-01 12일차 (0) | 2023.06.01 |
---|---|
2023-05-31 11일차 (0) | 2023.05.31 |
2023-05-26 9일차 (1) | 2023.05.26 |
2023-05-25 8일차 (0) | 2023.05.25 |
2023-05-24 7일차 (2) | 2023.05.24 |