12.31(금)

강병철·2021년 12월 31일
0

회고

목록 보기
14/68
post-custom-banner

오늘 한 일

✅ enum 공부
✅ 네이버 코딩 컨벤션 설정에서 indent 에 탭 대신 스페이스 쓰도록 설정 변경 (+ checkstyles-rules.xml 파일도 수정)

  • 탭으로 했더니 인텔리제이 코드를 velog 에 붙여넣을 때 indent가 너무 커져서 보기 불편하다.
    (사실 쓰기에는 탭이 편하긴 한데.. 어차피 reformat code 기능을 이용하니까 이렇게 설정해놔 봐야겠다)
  • 스페이스 사용 시 경고에서 탭 사용 시 경고로 변경
    네이버 말대로 했는데도 Checkstyle 경고 설정이 안바뀌어서 한참 헤매다가 여기 덕분에 해결했다.

✅ try-with-resources 기능 알아보기
✅ 알고리즘 풀기

오늘 배운 것

Enum

enum은 열거형(enumerated type)이라고 한다.
연관된 상수들의 집합이다.

class Fruit{
    public static final Fruit APPLE  = new Fruit();
    public static final Fruit PEACH  = new Fruit();
    public static final Fruit BANANA = new Fruit();
    private Fruit(){}
}
  • 위 코드는 enum을 이용해서 아래와 같이 단순하게 만들 수 있다.
enum Fruit{
    APPLE, PEACH, BANANA;
}
  • 아래와 같이 생성자를 이용해 인스턴스(APPLE,PEACH..)에 변수 값을 부여할 수 있다.
  • 그리고 enum 은 메소드도 가질 수 있다. (getColor())
enum Fruit{
    APPLE("red"), 
    PEACH("pink"), 
    BANANA("yellow");
    
    private String color;
    
    Fruit(String color){
        this.color = color;
    }
    
    String getColor(){
        return this.color;
    }
}
//--------------------------------------
System.out.println(Fruit.APPLE.getColor());
// red
  • 이런 식으로 각 enum 인스턴스에 대응하는 변수값을 줄 수 있다.
  • values()를 이용해 enum 멤버를 열거 할 수도 있다.
 for(Fruit f : Fruit.values()){
            System.out.println(f+", "+f.getColor());
        }
/*
APPLE, red
PEACH, pink
BANANA, yellow
*/

아래는 다른 분의 Sokoban 게임 코드에서 봤던 enum 활용 예시이다 .
각 인스턴스에 여러 변수값을 줄 수도 있다.(direction, reverse, message)
(출처 : https://github.com/jinan159/codesquad_2022_sokoban)

엄청난 기능이다

try-with-resources

try(..) 에서 선언 된 객체들에 대해 try가 종료될 때 자동으로 자원을 해제해준다. 즉,

try 구문 사용 시 close()를 따로 해줄 필요가 없게 해주는 기능

java.lang.AutoCloseable 을 구현하는 객체들에 대해서만 사용이 가능한데, 목록 을 보니 왠만해서는 가능하다고 보면 될 것 같다.

사용 방법

  • try(..) 구문의 괄호 안에 사용할 객체들을 선언해주면 된다.
public class ResourceClose {
    public static void main(String[] args) {
        try (Scanner sc = new Scanner(new File("input.txt"))) 
        {
           System.out.println(sc.nextLine());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
  • 같은 코드를 try-catch-finally 구문을 이용하면 아래와 같다. (finally 에서 따로 close()를 호출해줘야한다)
public class ResourceClose {
    public static void main(String[] args) {
        Scanner sc = null;
        try {
            sc = new Scanner(new File("input.txt"));
            System.out.println(sc.nextLine());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (sc != null) {
                sc.close();
            }
        }
    }
}

이렇듯 try-with-resources 를 사용하면 close()를 따로 해주지 않아도 된다.

  • 아래와 같이 ;로 구분하여 여러개의 객체를 사용 할 수도 있다.
public class ResourceClose {
    public static void main(String[] args) {
        try (Scanner sc = new Scanner(new File("input.txt"));
             BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            System.out.println(sc.nextLine());
            System.out.println(br.readLine());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

앞으로는 마음 편하게 try-with-resources를 사용하자

📚참고
https://codechacha.com/ko/java-try-with-resources/
https://hianna.tistory.com/546

느낀점, 다짐

배움의 즐거움이 이런것인가!


내일 할 일

🟥 Stream 공부

post-custom-banner

0개의 댓글