메서드 오버로딩(Method Overloading) with 자바

DongJoo Kwak·2022년 2월 24일
0
post-thumbnail

🎈최근 스프링을 공부하며 자바공부를 복기중인데 자바의 특징들을 다시 공부하며 정리해보려 한다!

📌 메서드 method

: 어떠한 작업을 수행하기 위한 명령문들의 집합. main() 도 메서드
메서드 : 연산을 처리하는 곳 
변수 : 그 결과를 저장하는 곳 
메서드는 어떤 값을 입력받아 처리하고, 그 결과를 하나 돌려줄 수 있다.  

✨목적/장점 : 재사용 : 반복적인 코드를 줄이고 코드 관리가 용이함. 

1) 메서드 정의와 사용 

#1. 입력값, 리턴값 없는 경우 
#정의 
리턴타입 메서드명(){
	// 수행할 코드들.._

}

---------------------------------
#사용(호출) 
메서드명(); 

2. 입력값, 리턴값 둘다 있는경우 
#정의 
리턴타입 메서드명(타입 파라미터명, 타입 파라미터명,...) {
	// 수행할 코드...
	return 값; 
}
---------------------------------
#사용(호출) 
변수 = 메서드명(인자, 인자, ..); 
	

📌 용어 정리

- 리턴타입 : 작업을 수행하고 리턴해줄 데이터의 타입. 
		리턴되는 값과 동일한 데이터타입을 명시. 
		리턴이 없으면 void라고 작성. 
- 메서드명 : 메서드 이름(변수 명명규칙 참고) 
- 파라미터 : 매개변수라고도 부름. 메서드에 외부로부터 입력받을 데이터를 받아줄 변수.
		없으면 괄호 비워두기. 
        
return : 메서드를 호출한 곳으로 값을 돌려주는 키워드.
	1) 메서드를 종료시킴
	2) 뒤에 적힌 값을 호출한 곳으로 돌려줌
	리턴타입이 void가 아닌 이상 반드시 return 값; 이 있어야 함. 
	리턴타입과 return뒤에 기입할 데이터의 타입이 동일해야함. 
	void 리턴타입에서 어떤 조건에 의해 메서드가 중간에 강제 종료되어야할때는 
	return; 키워드로 처리 가능.
    
    
*인자 : 매개변수, 인수, arguments : 메서드를 호출할때, 메서드에게 보내줄 데이터.
	인자 -> 파라미터 
*변수 : 메서드 실행 후 return으로 돌려받은 결과값 저장해줄 변수 

! 주의 ! : 인자와 파라미터의 개수/순서/데이터타입은 반드시 일치해야한다!!!

📌메서드 종류

	#1. 클래스 메서드 : static 붙은 메서드 
		객체 생성안하고 바로 사용 가능 ex)Math.random()
		클래스명.메서드명(); 

	#2. 인스턴스 메서드 : 일반 메서드 
		객체 생성 후 사용가능
		같은 클래스안에서 서로 호출하면, 객체 생성없이 바로 호출 
		-> 메모리 생성 시기가 같아서 가능. 

 ✨main()메서드 : 클래스 메서드 
	public static void main(String[] args) {
		// 코드 작성... 
	}

	public : 접근지정자 : 전체 공개 
	static : 클래스 메서드 선언 
	void : 리턴타입 : 리턴해줄것 없다~~ 
	(String[] args) : 매개변수 배열 
	{} : 메인메서드 영역 

📌 인자 전달방식

자바의 인자 전달 방식(argument passing)은 "값의 의한 호출: Call-by-value"이다. 
호출하는 실제 인자의 값이 복사되어 메서드의 파라미터에게 전달된다. 

1) 기본형값 전달 : read only : 값만 복사해줌. 원본 회손X 
2) 참조형값 전달 : read & write : 객체의 레퍼런스(주소값)이 전달. 
		

📌 메서드 오버로딩 (method overloading)

1) 한 클래스 내에, 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 
	여러개의 메서드를 중복 작성 가능. 
	이를 메서드 오버로딩이라 한다. 

2) <span style="color: red">조건 </span>
	#1. 메서드 이름이 동일해야함. 
	#2. 매개변수의 개수나 데이터 타입이 서로 달라야함. 
	(주의! 매개변수의 이름이 다른것은 조건에 해당 안됨.
		리턴타입 또한 조건에 해당 안됨) 
public class Test67 {
	int getSum(int a, int b) {
		return a + b;
		
	}
	int getSum(int a, int b , int c) {
		return a+ b+ c;
	}
	
	//가능 (타입차이)
	int getMul(int a, int b) {
		return a*b;
	}
	//메서드 오러로딩 : 메서드 이름
	double getMul(int a, double b) {
		return a*b;
	}
	///불가능 -> 매개변수의 타입이 일치하면 오버로딩 불가, 불필요
	int getSub(int a, int b) {
		return a-b;
	}
	int getsub(int a, int b) {
		return a/b;
	}
	
	
	
	public static void main(String[] args) {
		// 가능
		Test67 test = new Test67();
		System.out.println(test.getSum(10, 20, 100));
		
		System.out.println(test.getMul(5, 3));
		System.out.println(test.getMul(5, 3.0));

	}
}

💡
메서드 오버로딩은 자바 컴파일러에 의해 판단되며.
컴파일러가 이름이 같은 메서드들을 구분할 수 있으면 오버로딩 성공
컴파일러가 메서드 이름과 매개변수의 개수/타입 일치하는 메서드를 찾아냄

📈금융 개발 블로그 : https://quantpro.co.kr/

profile
즐거운 개발 공간

0개의 댓글