🎈최근 스프링을 공부하며 자바공부를 복기중인데 자바의 특징들을 다시 공부하며 정리해보려 한다!
: 어떠한 작업을 수행하기 위한 명령문들의 집합. 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 : 객체의 레퍼런스(주소값)이 전달.
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));
}
}
💡
메서드 오버로딩은 자바 컴파일러에 의해 판단되며.
컴파일러가 이름이 같은 메서드들을 구분할 수 있으면 오버로딩 성공
컴파일러가 메서드 이름과 매개변수의 개수/타입 일치하는 메서드를 찾아냄