일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 데이터베이스
- 텍스트마이닝
- 요구사항확인
- 데이터분석
- numpy/pandas
- C++
- 데이터시각화
- 자연수의성질
- 머신러닝
- pandas
- 디버깅
- 자바
- html/css
- 핵심프로젝트
- 자바 실습
- JSP/Servlet
- 언리얼학습
- 코딩테스트
- 정보처리기사실기
- 이수증
- 파이썬
- 딥러닝
- 정보처리기사필기
- Orange
- c언어
- 데이터입출력구현
- 언리얼프로젝트
- 중학수학
- 선형분류모델
- 선형회귀모델
- Today
- Total
클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지
클래스와 객체 17 - 단원 연습문제 이론편 문제 풀기 : 1~5번 본문
드디어 연습문제를 풀어볼 수 있게 되었다. 간단한 문제는 책에다 풀고 코드를 작성해야 하는 부분은 이클립스에다 풀어보려고 한다. 하지만 모든 문제에 대해 해설과 함께 설명을 써보며 내가 원하는 문제로 바꾸어서 출력해보기도 할 것이다. 지난번 3장에서 그랬듯이..
그럼 학습을 시작해보자!
연습문제 이론편 문제 풀기
1번 문제
자바의 클래스와 객체에 대한 설명 중 틀린 것은?
① 자바에서 클래스 바깥에 전역 변수를 선언할 수 없고 모든 변수는 클래스 안에 있어야 한다.
④ 필드는 클래스 내에서 private으로 선언하여 보호하는 것이 일반적이다.
2번 문제
생성자에 대한 설명 중 틀린 것은?
④ 생성자에서는 아무 값도 리턴하지 않기에 return 타입을 지정할 수 없다. 하지만 생성자에서 return 문을 사용할 수 없다는 뜻은 아니다. return 문은 메소드의 실행을 끝내고 호출한 곳으로 돌아가라는 명령이므로, 생성자의 실행을 끝내고자 하면 생성자 코드 내 어디서든 return 문을 사용할 수 있다.
3번 문제
다음 코드 중 오류가 있는 것은?
1) 번 문제
처음에는 오류가 떠서 왜 그런가 했는데 클래스 이름이 Power로 되어 있어야 했다. 그리고 배열의 각 원소를 초기화해야 이 객체를 사용할 수 있게 된다.
하지만 같은 클래스 이름을 사용하면 오류가 뜨므로 한 개씩 진행해보기로 했다.
2)번 문제
3)번 문제
여기서는 오류가 뜬다. 이건 C나 C++에서 배열을 선언하는 방시이다. 자바에서는 배열을 선언할 때 이러한 방식으로 배열의 크기를 지정할 수 없다. 배열의 크기를 지정하지 않고 배열을 선언하고, new 연산자를 사용하여 배열 객체를 생성한다.
이건 언어마다 문법이 다르기 때문에 암기해야 할 것이다. 배열할 때 많이 공부해서 이 문제는 매우 쉽게 풀었다.
4)번 문제
이 코드로 사용 가능하지만 뒤의 문장에서는 오류가 떠서 주석 처리해주었다. 그 이유가 무엇일까? Power[ ] p;는 power 객체를 담을 수 있는 배열 변수 p를 선언하지만, 배열을 생성하지는 않아 p는 null 상태이다. 그렇기에 배열을 사용하기 전에 배열을 초기화해야 한다. 만약 초기화하지 않으면 NullPointException이 발생한다.
이 문제는 사용은 할 수 있지만 이후 작업이 필요한 코드였다.
이렇게 작은 문제 하나하나 코드를 분석하며 풀어보니 시간은 많이 걸려도 확실히 이해할 수 있게 되는 것 같다. 이제 다음 문제로 넘어가보자.
문제 4번
다음 코드에 대해 설명하는 문항 중 틀린 것은?
Book[] book = new Book[10];
이 문제는 크기가 10인 Book 객체 배열을 선언과 동시에 생성하는 문장이다.
① book은 배열에 대한 레퍼런스 변수이다.
② 객체 배열은 객체의 레퍼런스를 요소에 저장하는 배열이다. 아직 Book 객체는 만들어지지 않았고, Book 객체의 레퍼런스를 저장할 크기가 10인 배열만 만들어진 상태이다.
③ 객체의 레퍼런스를 저장하는 배열에 new 연산자로 각각의 객체를 성성한 뒤 대입해야 객체 배열이 완성된다.
④ book의 인덱스 i번째 요소에는 Book 객체에 대한 레퍼런스 값이 저장되어 있다. 즉 book[0], book[1] ... book[9] 모두 Book 객체에 대한 레퍼런스이다.
문제 5번
다음 중 메소드 오버로딩에 실패한 사례는?
1)번 문제
void라고 썼기에 리턴 타입이 다르니 메소드 오버로딩이 당연히 되는 것로 생각했다. 하지만 전혀 아니었다.
이 문제를 이해하기 위해서는 어떤 때 오버로딩이 성립하는지 알아야 한다.
- 메소드 이름이 같아야 한다.
- 매개변수의 개수나 타입이 달라야 한다.
- 리턴 타입만으로는 오버로딩이 구별되지 않는다.
리턴 타입으로는 오버로딩을 구별할 수 없기에 안 되는 것이다.
- Java에서는 메소드 오버로딩이 리턴 타입만으로 구별될 수 없다. 즉, 메소드의 이름과 매개변수의 리스트가 동일하다면 리턴 타입이 다르더라도 오버로딩으로 인정되지 않는다.
- 두 메소드는 매개변수의 타입과 개수가 동일하기 때문에, 단순히 리턴 타입이 다르다고 해서 오버로딩이 성립되지 않는다.
2)번 문제
3)번 문제
4)번 문제
static은 안되는 줄 알았는데 이것도 가능했다. 메소드 오버로딩은 인스턴스 메소드와 static 메소드 모두에서 적용될 수 있다. 중요한 점은 메소드의 이름과 매개변수 리스트가 서로 다르면 오버로딩이 가능하다는 것이다.
다음은 static 오버로딩의 예시를 좀더 살펴보면 문제 코드를 하나 작성해보았다.
static 오버로딩 예시
이렇게 static도 오버로딩이 잘 되는 것을 확인할 수 있다.
학습을 마치고
문제가 많아서 여기까지 마치고 다음 포스트에서 6번 문제부터 풀어보려고 한다. 5번 문제까지는 이론적인 내용이 많았다면 이 다음 문제부터는 코드를 수정하며 좀더 복잡한 코드들이 준비되어 있다.
이제 아침 수업도 20분밖에 남지 않아 정말 아쉽지만 풀 수 있는데 까지 풀어봐야지!
'프로그래밍 언어 > 자바' 카테고리의 다른 글
클래스와 객체 19 - 단원 연습문제 이론편 문제 풀기 : 9~16번 (0) | 2024.08.19 |
---|---|
클래스와 객체 18 - 단원 연습문제 이론편 문제 풀기 : 6~8번 (0) | 2024.08.19 |
클래스와 객체 16 - final 및 Open Challenge 문제 풀기 (0) | 2024.08.19 |
클래스와 객체 15 - static 멤버 2 : static 활용 및 static 메소드의 제약 조건 (0) | 2024.08.19 |
클래스와 객체 14 - static 멤버 1 : static 멤버의 생성 및 활용 2가지 방법 (0) | 2024.08.19 |