목차
없음
본문내용
머리부와 몸체 모두가 클래스 정의에 나타날 수 있다. -> 자동적으로 인라인 함수가 된다.
10. C++ 생성자의 목적은 무엇인가?
> 사용자가 새롭게 만들어진 객체의 멤버 데이터들을 초기화하기 위해 사용된다.
11. 모든 Java메소드는 어디에 정의되는가?
> 클래스에만 정의될 수 있다.
12. C++클래스 객체는 어떻게 생성되는가?
> 스택-동적이거나 힙-동적으로 생성된다. new 연산자를 이용하여 객체를 생성한다.
13. Java 클래스 객체는 어디에 생성되는가?
> 힙에서 할당되고 참조 변수를 통하여 접근된다.
14. Java는 왜 소멸자를 갖지 않는가?
> Java는 묵시적으로 가비지 수집을 수행하기 때문에, 소멸자가 없다.
15. 프랜드(friend) 함수란 무엇인가? 프랜드 클래스란 무엇인가?
> 비 멤버 함수를 클래스의 프렌드 함수가 되도록 한다. 프랜드로 선언된 클래스의 전용 개체를 접근할 수 있다.
클래스 전체가 다른 클래스의 프렌드로 정의될 때 클래스의 모든 전용 멤버는 프렌드 클래스의 모든 멤버에 가시적이다.
16. Java가 프렌드 함수 또는 프렌드 클래스를 갖지 않는 이유는 무엇인가?
> Java에 있어서 캡슐화 명칭은 패키지이고, C++와 C#에 있어서 캡슐화 명칭은 이름 공간이다. 부분적으로 패키지의 이용성 때문에 Java는 프렌드 함수나 프렌드 클래스를 갖지 않는다.
17. Java는 왜 소멸자 메소드를 갖지 않는가?
> Java는 묵시적으로 가비지 수집을 수행하기 때문에, 소멸자가 없다.
25. Ada 포괄형 클래스의 사례는 어떻게 생성되는가?
> 컴파일 시간에 다른 원시코드를 생성하게 된다.
26. C++ 템플릿 클랫의 사례는 어떻게 생성되는가?
> 컴피일 시간에 사례화된다. C++에서 사례화는 묵시적이다. 새로운 사례는 아직 존재하지 않는 템플릿 클래스의 버전을 요구하는 객체가 생성될 때마다 생성된다.
30. with절과 use절의 목적을 서술하라.
with
프로그램 단위로부터 패키지에 대한 가시성을 얻는다.
use
자격없이 패키지에 있는 이름을 접근하기 위해 사용될 수 있다.
31. Java의 패키지란 무엇인가? 그리고 목적은 무엇인가?
> 한 개 이상의 클래스 정의를 가지며 패키지 내에서 각 클래스는 다른 클래스의 부분 프렌드이다.
Chapter 12
1. 객체지향 언어의 세 가지 특징은 무엇인가?
> 추상 데이터 타입, 상속 , 메소드에 대한 메소드 호출의 동적 바인딩
2. 클래스 변수와 사례 변수의 차이점은 무엇인가?
클래스 변수
객체 보다는 클래스에 속한다. 따라서 클래스에 하나만이 존재한다.
사례 변수
객체의 상태를 저장한다.
3. 무시한 메소드(overloading method)는 무엇인가?
> 파생클래스의 객체에는 특별하지만 부모 클래스의 객체에는 적절하지 않은 연산을 제공하기 위한 것이다.
4. 동적 바인딩이 동적 바인딩이 없는 것보다 대단한 장점이 되는 상황을 서술하라.
> 프로그램의 유지 보수가 필요한 사항에 장점을 갖는다. 새 클래스 추가해야 할 경우, 기저 클래스로 부터 상속 받아서 오버라이딩 메소드를 통해 단순하게 정의할 수 있고 다른 클래스에 대한 코드 변화를 요구하지 않는다.
5. 가상 메소드란 무엇인가?
> 부모 클래스에서 메소드를 갖는 것은 의미 없지만 모든 후손 클래스는 특정 메소드를 가지고 있기 때문에 부모 클래스에 포함시켜 주는 것이 메소드는 추상 메소드라고도 불리운다.
6. 객체지향 언어를 위한 이 장에서 사용한 7가지 설계 고려 사항을 간략하게 서술하라.
> 객체의 배타성
부클래스는 부타입인가?
타입 검사와 다형성
단일 상속과 다중 상속
객체의 할당과 해제
동적 바인딩과 정적 바인딩
중첩 클래스
7. 객체의 메시지 프로토콜은 무엇인가?
> 객체 메소드의 전체 집합
14. C++객체들은 어느 장소에 할당 되는가?
> 정적, 스택-동적, 힙-동적이 될 수 있다.
15. C++힙-할당 객체들은 어떻게 해제 되는가?
> 정적, 스택-동적, 힙-동적이 될 수 있다.
16. 모든 C++부클래스들은 부타입인가?
> 전용-유도 부크래스는 부타입이 될 수 없다.
17. C++메소드 호출은 어떤 환경에서 메소드에 정적으로 바인딩 되는가?
> New와 virtual을 통하여 가상화시키지 않는 이상, 모든 메소드가 정적으로 바인딩 된다.
18. 설계자가 정적으로 바인딩될 수 있는 메소드를 지정하는 것을 허용하는 단점은 무엇인가?
> 정적으로 바인딩 될 부분을 따로 지정하면 컴파일러가 복잡해지게 되어 컴파일러의 비용이 증가한다.
19. C++에서 private의 2가지 사용의 차이점을 설명하라.
> 클래스 멤버 접근을 보호 멤버로 지정하기 위한 private의 사용
파생 클래스에서 기저 클래스의 멤버들을 전용-유도 하기 위한 private의 사용
20. C++에서 friend 함수는 무엇인가?
> 해당 클래스 멤버 함수가 아니더라도 그 클래스의 전용(private)멤버에 접근할 수 있다.
21. Java의 타입 시스템이 C++의 타입 시스템과 어떻게 다른가?
> 해당 클래스 멤버 함수가 아니더라도 그 클래스의 전용(private)멤버에 접근할 수 있다.
22. Java 객체는 어느 장소에서 할당될 수 있는가?
> Java 객체 : 명시적 힙 동적 => 힙에 할당
23. Java 객체는 어떻게 해제 되는가?
> 명시적 해제 연산자는 없고 쓰레기 수집을 이용하여 기억장소를 회수 한다.
24. 모든 Java 부클래스는 부타입인가?
> 자바는 다중 상속을 허용하지 않으며, 다만 인터페이스 클래스에 한하여 다중 상속을 허용 한다. 따라서, final로 지정되어 있지 않다면 부타입으로 사용 가능하다.
25. Java 메소드 호출은 어떤 환경에서 메소드에 정적으로 바인딩되는가?
> Java에서 메소드는 어떤 후손 클래스에서 무시될 수 없다는 것을 의미하는 final로 정의될 수 있다. Final 예약어가 클래스 정의에서 명시되었을 때, 그 클래스는 임의의 부 클래스의 부모가 될 수 없다는 것을 의미한다. 또한 이것은 부 클래스의 메소드에 대한 메소드 호출의 바인딩은 정적으로 바인딩될 수 있다는 것을 의미한다.
10. C++ 생성자의 목적은 무엇인가?
> 사용자가 새롭게 만들어진 객체의 멤버 데이터들을 초기화하기 위해 사용된다.
11. 모든 Java메소드는 어디에 정의되는가?
> 클래스에만 정의될 수 있다.
12. C++클래스 객체는 어떻게 생성되는가?
> 스택-동적이거나 힙-동적으로 생성된다. new 연산자를 이용하여 객체를 생성한다.
13. Java 클래스 객체는 어디에 생성되는가?
> 힙에서 할당되고 참조 변수를 통하여 접근된다.
14. Java는 왜 소멸자를 갖지 않는가?
> Java는 묵시적으로 가비지 수집을 수행하기 때문에, 소멸자가 없다.
15. 프랜드(friend) 함수란 무엇인가? 프랜드 클래스란 무엇인가?
> 비 멤버 함수를 클래스의 프렌드 함수가 되도록 한다. 프랜드로 선언된 클래스의 전용 개체를 접근할 수 있다.
클래스 전체가 다른 클래스의 프렌드로 정의될 때 클래스의 모든 전용 멤버는 프렌드 클래스의 모든 멤버에 가시적이다.
16. Java가 프렌드 함수 또는 프렌드 클래스를 갖지 않는 이유는 무엇인가?
> Java에 있어서 캡슐화 명칭은 패키지이고, C++와 C#에 있어서 캡슐화 명칭은 이름 공간이다. 부분적으로 패키지의 이용성 때문에 Java는 프렌드 함수나 프렌드 클래스를 갖지 않는다.
17. Java는 왜 소멸자 메소드를 갖지 않는가?
> Java는 묵시적으로 가비지 수집을 수행하기 때문에, 소멸자가 없다.
25. Ada 포괄형 클래스의 사례는 어떻게 생성되는가?
> 컴파일 시간에 다른 원시코드를 생성하게 된다.
26. C++ 템플릿 클랫의 사례는 어떻게 생성되는가?
> 컴피일 시간에 사례화된다. C++에서 사례화는 묵시적이다. 새로운 사례는 아직 존재하지 않는 템플릿 클래스의 버전을 요구하는 객체가 생성될 때마다 생성된다.
30. with절과 use절의 목적을 서술하라.
with
프로그램 단위로부터 패키지에 대한 가시성을 얻는다.
use
자격없이 패키지에 있는 이름을 접근하기 위해 사용될 수 있다.
31. Java의 패키지란 무엇인가? 그리고 목적은 무엇인가?
> 한 개 이상의 클래스 정의를 가지며 패키지 내에서 각 클래스는 다른 클래스의 부분 프렌드이다.
Chapter 12
1. 객체지향 언어의 세 가지 특징은 무엇인가?
> 추상 데이터 타입, 상속 , 메소드에 대한 메소드 호출의 동적 바인딩
2. 클래스 변수와 사례 변수의 차이점은 무엇인가?
클래스 변수
객체 보다는 클래스에 속한다. 따라서 클래스에 하나만이 존재한다.
사례 변수
객체의 상태를 저장한다.
3. 무시한 메소드(overloading method)는 무엇인가?
> 파생클래스의 객체에는 특별하지만 부모 클래스의 객체에는 적절하지 않은 연산을 제공하기 위한 것이다.
4. 동적 바인딩이 동적 바인딩이 없는 것보다 대단한 장점이 되는 상황을 서술하라.
> 프로그램의 유지 보수가 필요한 사항에 장점을 갖는다. 새 클래스 추가해야 할 경우, 기저 클래스로 부터 상속 받아서 오버라이딩 메소드를 통해 단순하게 정의할 수 있고 다른 클래스에 대한 코드 변화를 요구하지 않는다.
5. 가상 메소드란 무엇인가?
> 부모 클래스에서 메소드를 갖는 것은 의미 없지만 모든 후손 클래스는 특정 메소드를 가지고 있기 때문에 부모 클래스에 포함시켜 주는 것이 메소드는 추상 메소드라고도 불리운다.
6. 객체지향 언어를 위한 이 장에서 사용한 7가지 설계 고려 사항을 간략하게 서술하라.
> 객체의 배타성
부클래스는 부타입인가?
타입 검사와 다형성
단일 상속과 다중 상속
객체의 할당과 해제
동적 바인딩과 정적 바인딩
중첩 클래스
7. 객체의 메시지 프로토콜은 무엇인가?
> 객체 메소드의 전체 집합
14. C++객체들은 어느 장소에 할당 되는가?
> 정적, 스택-동적, 힙-동적이 될 수 있다.
15. C++힙-할당 객체들은 어떻게 해제 되는가?
> 정적, 스택-동적, 힙-동적이 될 수 있다.
16. 모든 C++부클래스들은 부타입인가?
> 전용-유도 부크래스는 부타입이 될 수 없다.
17. C++메소드 호출은 어떤 환경에서 메소드에 정적으로 바인딩 되는가?
> New와 virtual을 통하여 가상화시키지 않는 이상, 모든 메소드가 정적으로 바인딩 된다.
18. 설계자가 정적으로 바인딩될 수 있는 메소드를 지정하는 것을 허용하는 단점은 무엇인가?
> 정적으로 바인딩 될 부분을 따로 지정하면 컴파일러가 복잡해지게 되어 컴파일러의 비용이 증가한다.
19. C++에서 private의 2가지 사용의 차이점을 설명하라.
> 클래스 멤버 접근을 보호 멤버로 지정하기 위한 private의 사용
파생 클래스에서 기저 클래스의 멤버들을 전용-유도 하기 위한 private의 사용
20. C++에서 friend 함수는 무엇인가?
> 해당 클래스 멤버 함수가 아니더라도 그 클래스의 전용(private)멤버에 접근할 수 있다.
21. Java의 타입 시스템이 C++의 타입 시스템과 어떻게 다른가?
> 해당 클래스 멤버 함수가 아니더라도 그 클래스의 전용(private)멤버에 접근할 수 있다.
22. Java 객체는 어느 장소에서 할당될 수 있는가?
> Java 객체 : 명시적 힙 동적 => 힙에 할당
23. Java 객체는 어떻게 해제 되는가?
> 명시적 해제 연산자는 없고 쓰레기 수집을 이용하여 기억장소를 회수 한다.
24. 모든 Java 부클래스는 부타입인가?
> 자바는 다중 상속을 허용하지 않으며, 다만 인터페이스 클래스에 한하여 다중 상속을 허용 한다. 따라서, final로 지정되어 있지 않다면 부타입으로 사용 가능하다.
25. Java 메소드 호출은 어떤 환경에서 메소드에 정적으로 바인딩되는가?
> Java에서 메소드는 어떤 후손 클래스에서 무시될 수 없다는 것을 의미하는 final로 정의될 수 있다. Final 예약어가 클래스 정의에서 명시되었을 때, 그 클래스는 임의의 부 클래스의 부모가 될 수 없다는 것을 의미한다. 또한 이것은 부 클래스의 메소드에 대한 메소드 호출의 바인딩은 정적으로 바인딩될 수 있다는 것을 의미한다.
소개글