(막연한 질문인 경우,
없으면 뭐가 불편할지를 가정하며 대답하면 잘 대답할 수 있다. )
Overloading기능을 지원하지 않았다면,
비슷한 기능을 하는 메서드들의 이름을 다 다르게 했어야 합니다.
동일한 기능을 하는데 이름이 다르면 사용하기 힘듭니다.
메서드의 이름을 기억하기 쉽고, 사용자 입장에서 사용하기도 쉽고, 관리하기 쉽습니다.
이.타.
이름이 같고, 타입이 다르면 ( 타입의 종류, 타입의 개수, 리턴 타입은 포함하지 않음 )
같은 이름으로 메서드를 오버로딩 할 수 있다.
// 컴파일러 입장에서 생각해보자. 구분이 가능할까?
1. 오버로딩 불가 ( 리턴 타입만 다름 )
int add(int a, int b) { return a + b; }
long add(int a, int b) { return (long) (a+b); } // 오버로딩 불가!
2. 오버로딩 가능 ( 타입 순서가 변하면 )
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
3. 오버로딩 가능 ( 타입 개수가 변함. )
int add(int a, int b) { return a+b; }
long add(long a, long b) { return a+b; }
int add(int[] a){ return a[0]; }
[ 면접 질문 ] 생성자란 무엇인가요?
인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’
입니다.생성자 호출 시
, 인스턴스 메서드들도 메모리에 올라온다.인스턴스를 생성하면 인스턴스변수들이 만들어지잖아요?
이 인스턴스변수들에 적절한 값을 저장하는 것을 인스턴스 초기화 라고 합니다.
인스턴스의 주소값
을 가지고 있습니다.참조변수 this가 인스턴스변수와 지역변수를 구별하기 위해 사용되었습니다.
인스턴스변수와 지역변수가 이름이 같을 때는 인스턴스변수 앞에 this.를 붙여야 서로 구분이 됩니다.
여기서 this를 붙이지 않는다면... 이름이 같기 때문에...둘 다 지역변수로 간주됩니다.
같은 클래스의 다른 생성자를 호출할 때 사용한다.
생성자의 첫 문장에만 가능
하다.this() : 생성자 함수를 가리킨다.
~~new 생성자()
와 같은 표현이지만, 어색하다.~~클래스 변수의 초기화 블럭
변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화라고 합니다.
생성자보다 먼저
) 실행된다.우리가 파일을 삭제해도 파일이 점유하고 있던 저장공간을 지우는 것이 아니라...
다른 파일에 의해서 덮어써지는 것이라는 것을 알고 계실겁니다.
마찬가지로 변수를 선언해서 저장공간이 마련되었을 때...
전에 사용되던 공간을 재활용하는 것일 수 있기기 때문에...
그 저장공간에는 이미 어떠한 값이 저장되어있을 가능성이 높습니다. 이 값을 쓰레기값이라고도 하는데요.
그래서... 변수를 선언한 다음에는... 변수를 적절한 값으로 초기화를 해주는 것이 필요합니다.
그렇지 않으면 쓰레기값이 사용되어서 생각하지 못했던 엉뚱한 결과를 얻을 수 있겠죠.
클래스 변수와 new연산자를 통해서 생성되는... 인스턴스, 배열 은 각 타입의 기본값으로 자동초기화 됩니다.
사실은 이러한 제약... 지역변수는 반드시 초기화를 해주어야 한다는 제약...은
없어도 되는 것이기도 하지만... 개발자의 실수를 줄여주기 위해서 만들어진 것입니다.
항상 클래스 초기화가 인스턴스 초기화 보다 먼저 수행되고...
기본값, 간단한 초기화 , 복잡한 초기화... 의 순서로 초기화가 수행되고...
인스턴스 초기화의 마지막으로는 생성자가 호출된다는거... 잘 기억해주시기 바랍니다.