사이먼's 코딩노트
[Java] 생성자 문제풀이 본문
- Java 생성자와 관련된 문제를 풀어봅시다.
- Main 메서드에 작성된 코드를 보고 나머지 클래스와 메서드를 작성해봅시다.
[문제 1]
- 아래 코드를 보고 계산기 객체가 더하는 기능의 옵션을 3가지 이상 가지도록 코드를 완성해봅시다.
public class Main {
public static void main(String[] args) {
계산기 a계산기 = new 계산기();
System.out.println(a계산기.더하기(10, 20));
// 출력 : 30
System.out.println(a계산기.더하기(10, 20, 30));
// 출력 : 60
System.out.println(a계산기.더하기(10.5, 20, 30));
// 출력 : 60.5
}
}
[문제 1 정답]
public class Main {
public static void main(String[] args) {
계산기 a계산기 = new 계산기();
System.out.println(a계산기.더하기(10, 20));
// 출력 : 30
System.out.println(a계산기.더하기(10, 20, 30));
// 출력 : 60
System.out.println(a계산기.더하기(10.5, 20, 30));
// 출력 : 60.5
}
}
class 계산기 {
int 더하기(int a, int b) {
return a + b;
}
int 더하기(int a, int b, int c) {
return a + b + c;
}
double 더하기(double a, int b, int c) {
return a + b + c;
}
}
- Main 메서드를 살펴보면 new 계산기() 를 통해 객체 하나를 생성하였고 계산기는 더하기() 라는 메서드를 가지고있다.
- 여기서 더하기() 메서드는 서로 다른 인자 값을 넘겨주고 있다.
- 첫번째 더하기() 에서는 정수 2개, 두번째 더하기() 는 정수 3개, 세번째 더하기() 는 실수 1개와 정수 2개를 인자 값으로 넘겨주고 있다.
- 이 때는 더하기() 하나의 메서드를 쓰는 것이 아니라 각 인자 타입에 맞게 매개변수를 다르게 써서 메서드 오버로딩을 해줘야한다.
- 주의할 점은 실수로 되어있는 부분은 매개변수 타입이 double로 되어야하고 메서드 자체의 타입도 실수를 return 해야되기 때문에 double로 작성해야한다.
[문제 2]
- 아래 코드를 보고 다음의 질문에 서술형으로 대답해봅시다.
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
class 사람 {
}
- 사람 클래스 안에 있는 생성자의 개수는?
- 사람 클래스의 부모 클래스는?
- 사람 클래스의 부모 클래스에 생성자가 1개 있다고 가정할 때 사람 클래스 안에 있는 생성자의 총 개수는?
[문제 2 정답]
- 사람 클래스 안에 있는 생성자의 개수는? (알 수 없음)
- 사람 클래스의 부모 클래스는? (Object 클래스)
- 사람 클래스의 부모 클래스에 생성자가 1개 있다고 가정할 때 사람 클래스 안에 있는 생성자의 총 개수는? (2개)
- 모든 클래스는 생성과 동시에 자기 자신의 생성자를 하나씩 가지고 태어난다.
- 사람 클래스는 사람() 이라는 생성자를 하나 가지고 있다.
- 하지만, 모든 클래스는 Object 라는 클래스의 자식 클래스이다.
- 다시 말해서 Object 클래스는 Java의 최상위 클래스이다.
- 즉, 위 코드에서 [class 사람 {}] == [class 사람 extends Object {}]의 약어라고 봐도 좋다.
- Object 클래스도 마찬가지로 자기 자신의 생성자가 하나 있지만 그 외의 생성자가 추가로 있을 수도 있기 때문에 사람 클래스 안에 있는 생성자의 개수는 자기 자신의 생성자만 생각했을 때는 1개라는 답도 괜찮지만 엄밀히 따지면 알 수 없음이 정확하다.
- 사람 클래스의 부모 클래스가 Object라는 사실을 알게되고, 만약 해당 부모 클래스에 생성자가 1개가 있다고 가정을 한다면 사람 클래스 안에는 Object() 와 사람() 생성자 2개가 있다는 것을 알 수 있다.
반응형
'Java > Java' 카테고리의 다른 글
[Java] static (0) | 2024.03.12 |
---|---|
[Java] super / final / switch (0) | 2024.03.12 |
[Java] 문제풀이(2) (0) | 2024.03.11 |
[Java] 문제풀이(1) (0) | 2024.03.11 |
[Java] ArrayList (0) | 2024.02.19 |