TIL 2021.02.12

Kyu·2021년 2월 12일
0

TIL

목록 보기
33/322

🧐 TIL (Today I Learned)

1. git checkout, git switch and git restore

git checkout은 git 2.23 부터 switchrestore 로 나누어서 사용할 수 있게 됐다. 처음엔 어떻게 나누어서 사용해야할지 잘 이해를 못했다. 링크에 따르면, git switch는 브랜치를 변경하는 것이다. 이건 git checkout이 하는 일 아닌가? 뭐가 변경 된거지? 생각했었는데 알고보니 다른 많은 일을 동시에 하는 명령어였다. 그러면 git restore는 무슨 일을할까? git restore는 어떤 특정한 커밋 단위를 참조할 수 있는 명령어이다. 이 말은, HEAD를 브랜치에서 분리해서 계층 관계가 변경/특정된 커밋을 가리키도록 하는 것이라고도 할 수 있다라고 생각한다. 언제 이 명령어를 쓸 수 있을까? 아직 그런 경험이 없어서 이 부분은 말할 수가 없어서 아쉽다. 아마도 이 문서를 참고하면 답이 나오지 않을까싶다.

2. 프레임워크 VS 라이브러리

프레임워크는 어떤 특정한 프로그램을 만들기 위한 기본적인 룰인 정해인 클래스와 인터페이스의 집합이라고 할 수 있다.

라이브러리는 단순히 프로그램을 만들기 위해서 단순히 필요한 도구들은 모아놓은 도구박스이다. 단순히 필요한 클래스를 불러서 사용하면 되는 것.

프레임워크는 그 안에 들어가서 작업하는 느낌이라고 생각하면 된다. 그래서 코드가 프레임워크에 의해 제어/사용된다고 말할 수 있지만, 라이브러리는 그 안에서 모아 놓은 도구들 중에서 단지 필요한 기능이 있을 때 하나의 도구를 불러와 사용하는 것이다.

3. 예외처리

생활코딩과 자바의정석을 통해서 예외처리에 대해 배웠다. 예외처리를 해줘야하는데 안해주면 IDE에서 알아서 해주니까 이때까지 계속 배우기를 미뤘던 거 같다. 사실 이미 IDE를 통해서 사용법은 곧장 배웠지만 조금 디테일한 부분은 몰랐었다.

전체적인 흐름

catch 문은 여러개 만들 수 있고 try 문을 실행해서 예외가 발생하면 catch 괄호 안에 Exception 들을 차례대로 검사한다. 내부적으로는 연산자 instanceof 를 통해 true인지 확인한다. true이면 그 catch문이 실행이 된다. catch문이 실행이 되면 다음 catch문은 검안하고 try catch 문을 빠져나와서 코드가 진행된다.

finally 구문

finally 문은 try catch 문에 상관없이 마지막에 삽입된 코드를 항상 실행시켜주는 구문이다. 이 구문이 필요한 이유는 예를 들어서, DB와 연결되어서 코드가 작동하고 있을 때 예외가 발생한다면? 예외가 발생하든 말든 마지막에 꼭 연결을 끊어줘야한다는 그런 상황이라면? finally 구문을 통해서 disconnet 하는 코드를 입력하면 된다.

throw

메서드에 throws 를 붙여서 예외처리를 하는 건 무슨 의미일까? 첫째로 어떤 특정한Exception 이 생길수 있다는 것을 암시하는 것이다.

void A () throws Exception

만약에 위와 같이 Exception 을 throw 하면 모든 Exception을 상속받는 다른 예외클래스들이 발생할 수 있다는 것을 암시해주는 역할을 한다는 것이다.

두번째는 그 메서드를 부른 메서드에 책임을 넘기는 것이다. 예외를 처리해주는 방법은 두가지이다. 한가지는 try catch 문을 이용하는 것이다. 나머지 하나는 위에 있는 코드처럼 메서드에 throws를 붙이는 것이다.

throws를 붙이면 그 메서드를 호출한 메서드에 책임을 넘긴다. 책임을 넘겨받은 메서드는 try catch 문을 통해서 예외를 처리해줘야한다. 그런데 그걸 또 throws할 수 있다. 이런 식으로 메인까지 가게 되면 메인에서 try catch문을 실행해줘야한다. 안해주면 비정상 종료된다.

class X {
    public static void main(String[] args) {
        try {
            Y();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static void Y() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        String aa = br.readLine();
        System.out.println(aa);
    }
// 정상적으로 printStackTrace() 가 실행되면서 예외처리가 되었다.

java.io.FileNotFoundException: test.txt (No such file or directory)
	at java.base/java.io.FileInputStream.open0(Native Method)
        at ...
        at ...

RuntimeException VS Exception

런타임예외를 상속받는 클래스는 꼭 예외처리를 안해줘도 되고 Exception 을 상속받으면 예외처리를 반드시 해줘야한다.

런타임예외는 프로그래머가 실수할 수 있는 것들에서 기인하기 때문이다. 대표적으로 ArrayIndexOutOfBoundsException 이라던가 NullPointerException 등이 있다.



✅To-do

미션2 코드리뷰 읽기 & 공부 & 피드백

  • 깃 PR 이후 upstream, rebase
  1. 체스만들기. 미션3

  2. 루카스에 있는 자바 공부할 거리 공부하기

  3. 생활코딩 객체지향 파트 (클래스 패스, 패키지, API, abstarct, final, 인터페이스, 다형성, 예외1 문법, 예외2 예외던지기, 예외3 만들기, Object 클래스, 상수와 enum, 참조, 제네릭) 링크

  1. 인프런 김영한님 스프링 입문 강의 (14강/28강 (50.00%) | 시간 : 140분/321분) 링크

나중에 해야 할 To-do 링크


그 외

애플카? 현대차와 폭스바겐이라는 거대한 제조업사가 애플과 파트너쉽을 체결하기 위해서 진땀흘린다. 늘 갑이었던 대기업 현대차가 을이 되는 상상. 정말 소프트웨어가 세상을 지배한다는 게 어떤 느낌인지 실감난다. 세상이 흘러가면 갈수록 이런 모습들이 더더욱 심화되겠지? 내가 선택해야했던 진로는 너무 당연해보인다.

profile
TIL 남기는 공간입니다

0개의 댓글