초기화 블럭
·
자바/기본적인 개념
1. 클래스 초기화 블럭 - 클래스 변수의 복잡한 초기화에 사용된다. - 보통 "static { ... }" 형식으로 사용된다. - 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행된다. - 앞서 배운 내용이지만, 클래스 초기화이므로 인스턴스 변수를 초기화하지 못한다. 2. 인스턴스 초기화 블럭 - 인스턴스 변수의 복잡한 초기화에 사용된다. - 보통 "{ ... }" 형식으로 사용된다. - 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다. - 인스턴스 변수의 초기화는 주로 생성자를 사용하고, 인스턴스 초기화 블럭은 모든 생성자에서 공통으로 수행돼야 하는 코드를 넣는데 사용한다. - 아래의 예제를 통해 이해하자. ( 위 예제에서 두 생성자는 "this.x++"을 ..
생성자
·
자바/기본적인 개념
1. 하나의 클래스의 인스턴스가 생성되는 코드의 단계 (1) 연산자 new에 의해서 메모리(heap)에 클래스의 인스턴스가 생성된다. (2) 생성자가 호출되어 수행된다. (3) 연산자 new의 결과로, 생성된 클래스의 인스턴스의 주소가 반환되어 참조변수에 저장된다. ( 주의할 점은 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. ) 2. 생성자에서 다른 생성자 호출하기 - this(), this - this는 참조변수로 인스턴스 자신을 가리킨다. - 사실 생성자를 포함한 모든 인스턴스 메서드에는 자신이 관련된 인스턴스를 가리키는 참조변수 'this'가 지역변수로 숨겨진 채로 존재한다. - 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출..
가변 인자(varargs)
·
자바/기본적인 개념
1. 가변 인자 (1) 아래와 같은 "타입... 변수명"과 같은 형식으로 선언하며, PrintStream 클래스의 printf()가 대표적인 예이다. public PrintStream printf(String format, Object... args) { ... } (2) 가변 인자 외에도 더 추가할 매개변수가 있다고 한다면, 맨 뒤에 가변 인자를 두어야 한다. (3) 아래의 함수와 같이 앞에 가변인자를 두게 되면 컴파일 에러가 발생한다. public PrintStream printf(Object... args, String format) { ... } 2. 예제 - 가변 인자를 활용하여 오버로딩 구현 ( 위 예제는 오버로딩을 구현했는데, 계속 해서 매개변수를 String으로 늘린다면, 차라리 Strin..
오버 로딩
·
자바/기본적인 개념
1. 오버 로딩 - 한 클래스 내에서 같은 이름을 가진 2개 이상의 메서드를 아래의 조건이 만족한다면, 정의할 수 있다. (1) 메서드 이름이 같아야 한다. ( 단, 반환 타입은 달라도 괜찮다. ) (2) 매개변수의 개수 또는 매개변수의 타입이 달라야 한다. ( 또는 이라는 말은 둘 중 하나의 조건만 맞다면, 오버로딩을 적용할 수 있다는 것이다. ) 2. 잘못된 예제(1) ( 매개변수의 이름이 다르더라도 갯수가 똑같기 때문에 에러가 발생한다. ) 3. 잘못된 예제(2) ( 위의 반환 타입 int와 long은 오버 로딩에 아무런 영향을 주지 않기 때문에, 오버 로딩을 할 때 오직 매개변수에만 고려해야 한다. ) 4. 올바른 예제(1) ( 이렇게 매개변수에 개수를 다르게 함으로써 오버로딩을 가능케 한다. )..