공부기록

공부기록, 2021-06-18(금), 067일차

정형준 2021. 6. 19. 15:37

## 자바
- 자동형변환, 수동형변환의 정의
  - 답 : 자바가 직접 알아서 해주는 경우가 자동형변환, 개발자가 직접 소스코드로 형변환하는 경우가 수동 형변환
- 일반값의 형변환(캐스팅)에 대해서, 자바는 언제 안전하다고 느끼는가?
  - 답 : 값손실이 발생 할 수 없을 경우, 예를들어 정수가 실수로 바뀌는 경우
- 일반값의 형변환(캐스팅)에 대해서, 자바는 언제 위험하다고 느끼는가?
  - 답 : 값손실이 발생 할 가능성이 있는 경우, 예를들어 실수가 정수로 바뀌는 경우
- 아래 두 클래스가 있다고 가정하자.
  - class 사람 { void 숨쉬다(){} void 말하다() {} }
  - class 원숭이 { void 숨쉬다(){} void 묘기부리다() {} }
  - 사람 리모콘의 버튼 개수와 구성은?
    - 답 : 버튼 2개(숨쉬다, 말하다)
  - 원숭이 리모콘의 버튼 개수와 구성은?
    - 답 : 버튼 2개(숨쉬다, 묘기부리다)
  - 원숭이 a원숭이 = new 사람(); // 이 코드가 안되는 이유는?
    - 답 : 사람 리모콘에 사람이 연결되어 있고, 리모콘에 묘기부리다 버튼이 추가된다면, 그리고 묘기부리다 버튼을 눌렀을 때, 사람이 묘기를 부려야 하는 상황이 온다. 그래서 자바는 is a 관계가 아니면, 자동형변환을 허용하지 않는다.
- 아래 두 클래스가 있다고 가정하자.
  - class 동물 { void 숨쉬다(){} }
  - class 원숭이 extends 동물 { void 묘기부리다() {} }
  - 동물 리모콘의 버튼 개수와 구성은?
    - 답 : 1개(숨쉬다)
  - 원숭이 리모콘의 버튼 개수와 구성은?
    - 답 : 2개(숨쉬다, 묘기부리다)
  - 동물 a동물 = new 원숭이(); // 이 코드가 되는 이유는?
    - 답 : 원숭이 리모콘이 동물 리모콘으로 변경될 때는, 항상, 버튼을 제거할 일만 있고, 버튼을 추가할 일은 없다. 그렇기 때문에 늘 안전하다. 그래서 자바에서는 is a 관계라면 항상, 자동 형변환을 해준다. 여기서는 원숭이 is a 동물 관계가 형성되어있다. 그렇기에 동물이 할 수 있는건, 원숭이도 할 수 있다. 이렇게 되면 동물 리모콘의 버튼들은, 원숭이 리모콘에도 들어있을 수 밖에 없다. 그래서 원숭이리모콘이 동물리모콘이 될 때, 묘기부리다 버튼만 빼면 된다. 버튼을 빼는건 불편한 일이지만, 문제가 되진 않는다.
  - 원숭이 a원숭이 = a동물; // 이 코드가 안되는 이유는?
    - 답 : a동물 변수가 a원숭이 변수에게 '우리 모두 같은 객체와 연결되자'라고 제안하는 상황이다. a원숭이 변수가 a동물 변수에게 다음과 같이 묻는다. '나는 원숭이 하고만 연결될 수 있다. 너랑 연결되어 있는게 정말 원숭이가 맞니?' a동물 변수가 다음과 같이 대답한다. '나랑 연결되어 있는게 동물인건 확실한데, 그게 원숭이 일 수 도 있고, 사슴일 수 도 있고, 기타 다른 동물일 수 있다. 그래도 한번 시도 해볼래?', 그걸 듣고 a원숭이 변수가 다음과 같이 대답한다. '미안해, 하지만 이건 내가 임의로 결정할 문제가 아니야, 컴파일 오류를 발생시켜서 개발자의 주의를 끌어야 겠어, 그러면 개발자가 보고 가능 할 것 같으면 수동형변환으로 허용해주시고, 아니라고 판단되면 코드를 수정하시겠지!'
  - 원숭이 a원숭이 = (원숭이)a동물; // 이 코드가 되는 이유는?
    - 답 : 역 is a 관계일 때, 수동형변환을 하면 컴파일러는 개발자를 믿고 무조건 넘어가 준다. 다만 그게 런타임에서 절대 문제가 안될 거라는 것은 아니다.
- 객체 리모콘의 형변환(캐스팅)에 대해서, 자바는 언제 안전하다고 느끼는가?
  - 답 : 리모콘의 변환이라는 것은 결국 버튼의 구성이 바뀐다는 것이다. 그 중 버튼이 제거되는 것은 불편하지만 위험하진 않다.
- 객체 리모콘의 형변환(캐스팅)에 대해서, 자바는 언제 위험하다고 느끼는가?
  - 답 : 버튼이 추가되는 것은 일종의 도박이다. 리모콘과 연결된 객체에, 이번에 추가된 버튼과 대응되는 기능이 없다고, 또 그 버튼이 결국 눌렸다면, 그 객체는 자신이 할 수 없는 것을 해야한다고 요청받는 샘이다, 컴파일러는 그런 문제가 최대한 발생하지 않도록, 아주 깐깐하게 문법검사를 해서 개발자를 괴롭힌다. 사실 그건 개발자에게 좋은 일이다. 컴파일러가 알려주는 컴파일 오류에게 감사하자.
- 컴파일 타임과 런타임의 차이 설명
  - 답 : 컴파일 타임은 컴파일과 문법 체크등을 하는 시간을 말한다. 런타임은 실행중인 시간을 말한다.
- 에러와 Exception의 차이 설명
  - 답 : 컴파일 에러는 컴파일 타임에 발견된 에러, 런타임 에러는 런타임에 발생한 에러
- 아래 코드가 되는 이유 설명  
  - double d = 10;
    - 답 : 자동형변환이 허용되는 경우라서, 즉 안전하기 때문이다.
- 아래 코드가 안되는 이유 설명  
  - double d = 10;
  - int i = d; // 여기가 안되는 이유 설명
    - 답 : 위험하기 때문에, 역 is a 관계 이기 때문에 수동형변환으로 넘어갈 수 있다.

 

- 리모콘을 받는 변수들에 대한 이해력 부족

## 큐
- 한 가지 언어라도 집중적으로 잘하자

## 내가 모르는 것
- 자바의 변수와 객체, 클래스에 대한 정확한 이해

## 느낀점
- 새롭게 배우는 자바를 잘 배워야겠다. 제일 중요한 언어라고 생각된다.

## 일정
- 14:00 ~ 15:00 : 귀가 및 점심식사
- 15:00 ~ 16:30 : 휴식
- 16:30 ~ 17:30 : 공부, 영상업로드1 
- 17:30 ~ 18:30 : 공부, 영상업로드2
- 18:30 ~ 19:30 : 공부, 영상업로드3
- 19:30 ~ 21:00 : 운동
- 21:00 ~ 22:00 : 휴식
- 22:00 ~ 23:00 : 블로그, 위키 정리