오늘은 개발과 커밋 자세히보기

프로그래밍 공부/Java

[ Java 프로그래밍 ] 공부 정리 - 4장 본문 퀴즈 및 연습문제

호크테마 2023. 4. 30. 14:45

* 공부 정리일자 (2022년 8~12월) 
- 책 : 명품 자바 에센셜 
- 개인적으로 공부 및 복습하면서 정리한 내용입니다. (사진 제외) 


chapter 04 클래스와 객체 (책 133p)
4.1 객체 지향과 자바 (책 133p) - 자바의 캡슐화, 상속, 다형성  
 1) 클래스 : 자바에서 객체를 정의하는 틀
 2) 다른 객체와의 통신을 위해, 다른 객체가 자신에게 접근할 수 있도록 객체의 일부 요소를 공개한다. 
 3) (2) 흐름도는 자바의 객체 지향 개념에 포함 X 
 4) 상속, 캡슐화, 다형성 

4.2 자바 클래스 만들기 (책 139p)

4.3 생성자 (책 144p)
 1) void 삭제, this(0)의 호출은 생성자의 제일 첫 줄에 와야 한다.
 class Samp {
  int id; 
  public Samp(int x) { this.id = x; } //void 삭제
  public Samp() { // void 삭제
   this(0); // this(0)의 호출은 생성자의 제일 첫 줄에 와야 한다.
   System.out.printIn(“생성자 호출”);
}}

4.4 객체 배열 (책 153p) / 4.5 메소드 활용과 객체 치환 (책 157p)

4.6 객체의 소멸과 가비지 컬렉션 (책 164p)
 1) 가비지 컬랙션는 자바 가상 기계가 가비지 자동 회수
     가용 메모리 공간이 일정 이하로 부족해질 때 가비지를 수거하여 가용 메모리 공간으로 확보
 2) for 문이 10번 반복되는 동안 new.Scanner(System.in);으로 할당받은 9개의 객체들이 가비지가 된다.

4.7 접근 지정자 (책 167p)  / 4.8 static 멤버 (책 172p) / 4.9 final (책 176p)


4장 연습문제  이론문제

1. (4) 클래스의 멤버 변수들은 보호하기 위해 가능하면 private으로 선언하는 것이 바람직하다

2. (3) this는 생성자에서 사용 가능하다.

3. (3)

4. 클래서 맴버, 공유된다, 클래스 이름, static 멤버, this

5. 두 메소드 f()의 매개 변수 개수를 다르기 때문에, f()의 메소드 오버로딩은 성공한 경우이다.
리턴 타입이 같거나 다르건 오버로딩에 상관없다.

6. 소멸시킬 수 없으며, 다행한, 참조하는 레퍼런스, 가비지컬렉션, System.gc()

7. 가능하면 멤버 변수(필드) private으로 선언하고, 생성자나 메소드를 통해 접 근하도록 하는 것이 바람직하다.
생성자를 이용하면 다음과 같이 할 수 있다

class Person { private int age;
public Person(int age) { this.age = age; } }
public class Example {
public static void main (String args[]) { Person a = new Person(17); } }
또는 다음과 같이 메소드를 작성해도 된다.
class Person { private int age;

public setAge(int age) { this.age = age; } }
public class Example {
public static void main (String args[]) { Person a = new Person(); a.setAge(17); }}

8. 15
plusTen() 메소드의 매개 변수 x는 원본 ob 객체를 가리키므로, x ob 객체의 멤버 n 값을 마음대로 바꿀 수 있다.
plusTen() 메소드에서 객체 ob n 값을 증가시켜 15가 된다.

9. this()가 없는 코드로 바꾸기

public class Rectangle { int w, h;
Rectangle(int w, int h) { this.w = w; this.h = h;
}
Rectangle(int w) { this.w = w; this.h = 2;
}
Rectangle() {
this.w = 1; this.h = 2; }
}

10. (4)
read() 메소드가 리턴하면 변수 s가 사라지며,
따라서 new Scanner(System.in); 에 의해 생성된 객체는 자기를 가리키는 레퍼런스가 하나도 없어지기 때문에 가비지가 됨

11. (4) getB() non-static 메소드이므로, static 메소드인 g()에서 호출할 수 없다.

12. (1) StaticSample 클래스의 멤버 x non-static 타입이므로 클래스 이름으로 접근 할 수 없다.