TIL 2021.02.12
🧐 TIL (Today I Learned)
1. git checkout, git switch and git restore
git checkout
은 git 2.23 부터 switch
와 restore
로 나누어서 사용할 수 있게 됐다. 처음엔 어떻게 나누어서 사용해야할지 잘 이해를 못했다. 링크에 따르면, 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
-
체스만들기. 미션3
-
루카스에 있는 자바 공부할 거리 공부하기
-
생활코딩 객체지향 파트 (
클래스 패스,패키지, API,abstarct,final,인터페이스,다형성,예외1 문법,예외2 예외던지기,예외3 만들기,Object 클래스,상수와 enum, 참조,제네릭) 링크
- 인프런 김영한님 스프링 입문 강의 (14강/28강 (50.00%) | 시간 : 140분/321분) 링크
그 외
애플카? 현대차와 폭스바겐이라는 거대한 제조업사가 애플과 파트너쉽을 체결하기 위해서 진땀흘린다. 늘 갑이었던 대기업 현대차가 을이 되는 상상. 정말 소프트웨어가 세상을 지배한다는 게 어떤 느낌인지 실감난다. 세상이 흘러가면 갈수록 이런 모습들이 더더욱 심화되겠지? 내가 선택해야했던 진로는 너무 당연해보인다.
Author And Source
이 문제에 관하여(TIL 2021.02.12), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyukim/20210212저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)