JAVA 메서드, 클래스와 생성자, 메서드 오버로딩
메서드란?
c언어로 치면 함수, 사람으로 치면 움직이는 동작을 취하는 곳, 따로 정의해놓을 수 있으며 .??? 으로 시작하는 것은 거의 모두 메서드이다.
main 문 밖에 따로 정의할 수 있으며 호출할 수 있다.
public static void hiEveryone(int age, double height) <-일때 괄호 안의 문자가 넘겨받는 인자값인 동시에 지역변수 선언이다.
public static void의 void는 반환형인데 void는 반환할게 없다는 뜻.
강제로 끝내려면 return을 해도 되는데 void면 그냥 return;하고 끝. 아닌경우에는 반환형에 맞춰서 return을 해줘야한다.
*리턴값은 무조건 하나만 들고갈 수 있다.
클래스란?
항상 코드를 작성할 때 마다 만들었던 클래스는 데이터(변수)와 메서드(기능)으로 이루어진다.
인스턴스 변수 = 클래스 내에서 선언된 변수.
인스턴스 메서드 = 클래스 내에 정의된 메서드.
BankAccount myAcnt1 = new BankAccount();
(잘보면 String 선언과 유사하다. 이유는 String도 클래스에 정의된 것이기 때문.) *Scanner도
1. 우리가 BankAccount라는 클래스를 만들어놓고 사용하기 위해서 myAcnt1이라는 주소를 담고 있는 이름을 붙여준다.
2. new로 인해 컴퓨터에게 BankAccouont를 참고하여 메모리 공간을 확보시킨다. = 새로 생성되는 인스턴스
3.새로 정의해 준 이름으로 메서드를 붙여 사용한다. myAcnt1.deposit(1000) deposit은 고객의 balance에 괄호안의 값을 추가하는 메서드.
우리가 사용했던 String도 Scanner도 참조변수처럼 우리가 만든 클래스도 참조변수이다.(주소값)
그리고 클래스 중간에 초기화 메소드라는 것이 있는데 반환 형식이 없고 데이터에 값을 초기화 하기 위한 용도로 사용된다.
public initAccount(String acc, String ss, int bal){
accNumber=scc;
ssNumber=ss;
balance=bal;
}
느낌이다.
근데 초기화 메서드는 반복해서 사용해야하는 경우 계속해서 호출해야하기 때문에 이러한 단점을 없애기 위해 실행 할 때
필수로 실행하게 하는 방법이 있다.
그게 바로 생성자다.
생성자란?
초기화 메서드를 계속해서 사용할 경우 호출하기 귀찮으니까 알아서 실행되게 하는 것이다.
특징 : 생성자의 이름은 클래스의 이름과 동일해야 한다.
생성자는 값을 반환하지 않고 반환형도 표시하지 않는다.
class BankAccount {
String accNumber;
String ssNumber;
int balance;
public BankAccount(String acc, String ss, int bal) {
accNumber = acc;
ssNumber = ss;
balance = bal;
}
}
하지만 우리가 생성자를 따로 정의하지 않아도 알아서 생성되는 생성자가 있는데 이걸 디폴트 생성자라고 한다.
컴파일러가 자동 삽입해준다.
메서드 오버로딩?
우리가 메서드를 사용하기 위해서 호출하고 메서드를 찾을 때 참고하게되는 정보가
1. 메서드의 이름
2. 메서드의 매개변수와 정보이다.
이름이 다르면 당연히 다른 메서드이고, 메서드의 이름이 같더라도 매개변수의 갯수와 형 이 다르면 다른 메서드이다.
*반환형은 메서드의 다름을 판단하는 기준이 아니다!
그리고 키워드 this는 어느 위치에서든 인스턴스 변수에 접근이 가능하다.
class Person {
private int regiNum;
private int passNum;
person(int rnum, int pnum) {
regiNum = rnum;
passNum = punm;
}
person(int rnum) {
regiNum = rnum; ) 여기 위 두 줄을 this로 합치면 this(rnum, 0); 으로 사용 할 수 있다.
passNum = 0; ) 아래
}
}