리턴(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

+ Recent posts