Java Basic: this-this()-static-overloading
this와 this()
this : 생성자나 멤버메소드 안에서 멤버변수 자신을 구별할 목적으로 사용
this() : 생성자가 중복정의 되어 있을때 생성자의 첫번째줄에서 다른 생성자를 동작시키고자 할 때 사용하는 키워드 반드시 생성자의 첫번째 줄에 위치해야함.
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public Person(){
this("홍길동",20); //생성자의 반드시 첫번째 문장에 올 것!
}
}
기본생성자
매개변수를 갖지 않는 생성자. 사용자가 생성자를 한개도 만들지 않으면 자바는 자동으로 “기본생성자”를 제공하여 각 자료형에 따라 초기화 해준다. 그러나사용자가 생성자를 하나라도 만든 경우에는 기본 생성자도 같이 만들어줘야 한다.
- 주민번호, 계좌번호, 전화번호 등의 속성은 번호이기는 하지만 이것을 가지고 계산을 하지는 않기 때문에 자료형은 String이 적합하다.
static 키워드
static키워드는 클래스 안의 변수명이나 메소드명앞에 올 수 있다. 변수명앞에 static을 붙이면 클래스 변수라고 하며 객체를 생성하지 않고 클래스 이름을 사용할 수 잇따. 또, 객체가 있다면 객체를 통해서도 사용할 수 있으며 모든 객체가 공유하는 변수이다.
메소드명 앞에 static을 붙이면 클래스메소드라고 하며 객체를 생성하지 않고 클래스이름을 통해사용할 수 있다. 또, 객체가 있다면 객체를 통해서도 사용할수 있다. static 메소드에서는 static 멤버에만 접근할 수 있다!
클래스를 만들 때에 멤버변수나 메소드를 객체와 무관하게 객체없이도 사용하게 하려면 변수명, 클래스 앞에 static키워드를 붙인다.
메소드 오버로딩
멤버변수가 없는 클래스에는 static 메소드로 선언해주는 것이 좋음
같은 이름의 메소드를 중복해서 선언할 수 있다. (단, 매개변수의 자료형이나 개수, 순서가 달라야 한다.)
Call by Value vs Call by Reference
call by value
- 메소드 호출시에 전달되는 매개변수가 기본자료형인 경우
- 메소드 호출시에 전달하는 매개변수의 값을 메소드 호출 당하는 쪽에서(메소드 안에서) 그 값을 복사해서 새로운 메모리가 확보된다. 그래서 만약 메소드 안에서 매개변수의 내용을 바꾸더라도 서로 다른 메모리이기 때문에 호출한 쪽에서는 변경된 내용이 적용되지 않는다.
call by reference
- 메소드 호출시에 전달되는 매개변수가 배열참조변수이거나 객체 참조변수인 경우
- 값이 아니라 참조하고 있는 배열의 주소나 객체의 주소가 메소드에게 전달된다.
- 따라서 메소드 안에서 참조하는 객체와 메소드를 호출하는 쪽에서 참조하는 객체가 서로 동일하다.
- 그래서 메소드안에서 참조하는 객체나 배열의 내용이 변경 될때에 원래 값도 같이 변경된다.