야놀자 테크캠프 - JAVA

기본적으로 아는 내용 이므로 '문시해알' 방법으로 정리

1. 문제
   - 정수형 리터럴은 기본형이 int, 실수형 리터럴은 기본형이 double이다(int i = 123에서 123은 int형으로 저장된다)
   - 그래서 long l = 123에서 123은 int여서 더 큰 범위인 long에 할당될 수 있다
   - 그리고 만약 long l = 12345678900과 같이 int범위를 넘어선 리터럴에서는 '이 리터럴은 long형으로 저장해줘'를 의미하는 L을 숫자 뒤에 붙여줘야한다(long l = 12345678900L)
   - 마찬가지로 float f = 3.14는 에러가 나는데, 3.14의 기본형은 double이고 이 리터럴은 더 작은 범위인 3.14에 저장하려고 하니 에러가 난다. 그러므로 float f = 3.14F로 변경해줘야한다
   - 그렇다면 byte b = 100을 하면 100은 int이고 더 넓은 범위이므로 에러가 나야할 것 같은데, 에러가 나지 않았다

2. 시도
   - short s = 100도 에러가 나지 않았다. char c = 65도 에러가 나지 않았다
   - 하지만, byte b = 200을 했을 경우 에러가 났다
   - 아마도, byte의 범위를 넘어선 int 리터럴을 저장했을 때 에러가 난다고 생각

3. 해결방법
   - 'Java의 정석' 책을 찾아보았다
   - byte와 short타입의 리터럴이 별도로 존재하지 않아서 int 타입의 리터럴을 사용한다고 한다
   - 다만, 각 타입의 변수가 저장할 수 있는 범위에 속한 것이여야 함

4. 알게된 점
   - 이 후 더 검색해서 찾아보니
      ① 리터럴은 일시적으로 스택(operand stack)에 저장됨(문자열 제외)
      ② 그래서 스택에 byte, short, int형 리터럴은 모두 4byte로 저장이 됨. 만약 12345678900과 같이 int 범위를 넘어서는 리터럴일 경우 8byte를 알려주기 위해 L을 붙임. 그리고 실수형은 8byte로 저장되는데 4byte인 float에 저장하기 위해 F를 붙임
      ③ 스택에 저장된 리터럴을 나중에 변수에 저장할 때, 그 때 형변환이 일어나면서 변수에 저장됨
   - byte, short의 operand stack공간이 4byte이므로 int 리터럴을 저장할 수 있었던 것임. 그리고 그것이 나중에 형변환이 일어난다
1. 문제
   - 컴퓨터로 실수를 표현할 때 왜 오차가 생기는 걸까?
   - 컴퓨터가 실수를 표현하는 방식인 부동소수점 때문에 생긴걸까?

2. 시도

3. 해결방법
   - 이진 표현의 한계 : 예를 들어 1/10은 십진수로 0.1로 표현되지만, 이진 수로는 0.000110011...이렇게 무한소수로 표현됨. 이로 인해 근사치를 사용하게 되고 여기서 오차가 발생함
   - 반올림 오차 : 컴퓨터는 유한한 비트로 실수를 표현하기 때문에, 이 때 반올림이 일어나고 여기서 오차가 발생함

4. 알게된 점
   - 실수를 표현할 때 오차가 생기는 중요한 이유는 '십진수를 정확하게 이진수로 표현할 수 없기 때문'임
   - 그러므로 고정소수점 방식이나 부동소수점 방식 모두 실수를 표현하는데 오차가 생김
   - 고정소수점과 부동소수점
      ① 고정소수점 : 숫자를 정수부와 소수부로 나누고 그 숫자를 이진수로 변환한 후 그대로 저장하는 방법
      ② 부동소수점 : 숫자를 정규화를 거쳐 특정 숫자로 만들고 그 숫자를 저장하는 방법
   - 부동소수점을 더 많이 쓰는 이유 : 고정소수점은 비트 수 대비 표현가능한 숫자가 적어서 사용하지 않음

야놀자 테크캠프 - Git, Github

1. Branch 관리하기 -> 가장 중요

   (1) 버전의 분기를 나눌 수 있음. 브랜치를 왜 나누고 어떻게 나눌지 알아야 함

   (2) 버전을 여러개의 흐름으로 나눈다

   (3) 브랜치가 없을 경우

      ① 만약 A ... -> ... 흐름이 있고, B ... -> ... 이 있을 때, 합치는 과정에서 하나하나씩 모두 비교해야함

      ② 각 사용자마다 요청이 다를 경우 무수한 파일을 만들어야함

   (4) 브랜치로 해결해보자

   (5) 브랜치 순서

      ① 브랜치를 나눈다(별도의 작업환경으로 나눈다)

      ② 각자의 브랜치에서 작업한다

      ③ 나눈 브랜치를 합친다(필요하다면)

   (6) 브랜치를 활용했을 경우

      ① 서로가 다른 부분을 수정했을 경우 -> 합쳐줌

      ② 서로가 같은 부분을 수정했을 경우 -> 충돌이 일어나서, 개발자가 직접 지정 후 해결

   (7) 브랜치 이름 : feature/menu처럼 브랜치 이름을 보고 짐작할 수 있도록 짓

   (8) 브랜치 명령어

      ① git branch : branch목록들과 현재 내가 있는 branch를 보여줌

      ② git branch foo : foo 브랜치 생성

      ③ git checkout foo : foo 브랜치로 이동 후 가장 최신 commit으로 이동

 

2. 충돌 해결하기

   (1) stash, apply, revert, pull, merge ... 등등 충돌은 여러 상황에서 발생하지만, 해결하는 방법은 모두 동일함

   (2) 결국 같은 부분을 다르게 수정했을 때 나타나는 현상임

   (3) 충돌은 큰 코드베이스에서 일상이므로 충분히 연습해서 당황하지 말자

   (4) 해결 방법

      ① 어떤 브랜치의 내용을 반영할지 직접 선별한다. 남기고자 하는 내용물을 남김(어디가 충돌났는지 git이 표시해줌)

      ② add후 commit

 

3. Github

   (1) 깃허브는 파일을 업로드하는 곳이 아니라, 버전(커밋) 내역들을 업로드하는 곳임

   (2) clone을 한 경우에 버전들이 다운받아지는 것


git, github강의는 끝났지만, 아직 부족하고 모르는 부분이 많다고 생각한다. 이번주는 git 기초부터 스스로 공부해보자.

'TIL(Today I Learned)' 카테고리의 다른 글

2023.07.14  (0) 2023.07.14
2023.07.13  (0) 2023.07.13
2023.07.11  (0) 2023.07.11
2023.07.10  (0) 2023.07.10
2023.07.08  (0) 2023.07.10

+ Recent posts