본문 바로가기
플레이데이터 sw 캠프 3기/기억더듬더듬 하루 회고록

[12.26 화] 밤에는 잠을 잡시다

by 눕는게최고야 2023. 12. 26.

안녕하쇼

 

시간을 절약하기 위해 인사를 줄여봤습니다. 오늘의 목표는 1시간 안에 복습  마무리 하기입니다.

 

근데 사실 복습하는 것보다 헛소리 쓰는데 시간이 더 걸리긴 합니다.

 

제가 지난 금요일에 오랜만에 밤새워서 놀았는데...아니 밤을 새서 놀고 싶던 것은 아니었습니다. 전 잠옷도 챙기고 다 챙겼는데.. 도통 친구들이 잘 생각을 안 하더라고요.

집 안가니

 

전 술을 잘 못 마십니다. 하지만 험악한 술자리에서 살아남기 위해서는 취한 사람들과 텐션을 맞추긴 해야합니다. 그거 전문입니다. 술 자리에서 술 없이 끝까지 자리 지키기 이 또한 쉽지 않은 것이라 전 자부합니다. 

 

아무튼 오래간만에 밤을 새보니, 복리로 늘어나는 피로를 상환하느라 주말을 다 써버렸습니다. 사채업도 이러지 않을 텐데

 

밥도 안 먹고 잠만 계속 잤는데, 겨울잠 자는 동물들이 왜 음식을 야무지게 먹고 자는지 알겠더라고요. 배고프니까 자도 힘들 더라고요. 아님 말고

 

그래도 재미있었습니다.... 진짜로

 

오늘의 이슈

- 건강관리 잘하기

아침부터 몸이 안 좋아서 조퇴를 하고 싶었다ㅠ 아프면 운동 못.. 아니 공부 못하니까 아프지 말기

오늘 한 것 

- 제네릭

 자바에서 데이터 타입을 미리 정하지 않고 다양한 타입을 처리 가능하게 고안. 

 예제를 통해 사용해 보니 너무 좋은 것 같아서 혼자서 계속 감탄했다. 호.... 코테 풀다가 나오면 한번 쓱 써봐야지

 코드의 재사용성 good!!!

 제네릭 메서드와 클래스.

    public static <T> void swap(T[] arr,int target1, int target2){
        T tmp = arr[target1];
        arr[target1] = arr[target2];
        arr[target2] = tmp;
    }
    
    // Lis
    public interface List<E> extends Collection<E>

 

 

이젠 정말 List <String> myList = new LinkedList <>() 이 문장의 모든 단어를 이해가능해졌다. ^0^

 

- Enum

 아주 가볍게 배우긴 했지만, Enum에 대해 개인적으로 좀 더 정리해 보기로 했다. 

 뭐 상수 값을 모아둔 클래스.. 같은 느낌? 

 빛의 속도로 떨어진 1년 전 우테코에서 상수 자체를 사용하면 지양하라고 했는데, 그때는 '허허..' 했지만 최근에는 그 이유를 확실하게 이해하고 있다. 

 (지극하게 내 생각)

 

1. 코드의 가시성이 좋아진다! 

public static main(String[] args){
	Order order = new order();
    order.getMenue(1); // 1이 어떤 메뉴를 의미하는지 나만 안다. 
}



public static main(String[] args){
	Order order = new order();
    order.getMenue(Menu.JJAMBBONG); // 아 짬뽕이구나 역시..
}

 

굉장히 단적인 예이지만 상수 값이 무엇을 의미하는지 다른 개발자들이 보고 알 수가 없다. 일일이 주석을 넣어주거나 클래스 내에서 Constant로 선언하는 방법도 있겠지만, 특정 범위에 연관된 상수들의 집합인 Enum으로 만들어 준다면 더 보기 편할 것이다.

+ 짬뽕을 jjambbong으로 쓰기도 할 것이고, 누구는 mylover로 쓰기도 할 것이다. 통일성을 가질 수 있다. 

 

2. 유지보수가 좋다.

만약 getMenue의 '짬뽕"을 2번으로 바꿔야 하는 상황이 오면, 모든 클래스에 있는 "1"을 바꿔줘야 할 것이다. 벌써 귀찮쥬?

Enum처리를 한다면 Enum에서 그 값만 수정해 주면 된다! 

 

아래처럼 같은 의미를 가지는 상수를 여러 개 가질 수 있다. 

public enum BridgeConstant {
    CAN_GO_UP(1,"U"), CAN_GO_DOWN(0,"D"),
    RETRY("R"), END("Q");

    int intValue;
    String stringValue;

    public int getInt(){
        return intValue;
    }
    public String getString(){
        return stringValue;
    }
    
    
    
    public List<String> makeBridge(int size) {
        List<String> bridgeInformation = new LinkedList<>();
        for(int i=0; i<size; i++){
            int number =bridgeNumberGenerator.generate();
            if(number == BridgeConstant.CAN_GO_UP.getInt()){
                bridgeInformation.add(BridgeConstant.CAN_GO_UP.getString()); //깔끔하쥬
            }
            if(number == BridgeConstant.CAN_GO_DOWN.getInt()){
                bridgeInformation.add(BridgeConstant.CAN_GO_DOWN.getString());
            }
        }
        return bridgeInformation;
    }

 

 

- 예외 처리

  자바에서는 적절한 예외처리를 통해 프로그램이 강제 종료되는 것을 막는다 (Spring에서는 그렇지 않다고 하셨따)

  어떤 예외가 발생했고, 어떤 메시지를 전달할 것인가와 같은 적절한 예외처리는 개발자, 사용자, 그리고 나에게 있어서    굉장 굉장 중요하다. loging과 debugging

- Checked Exception

외부 시스템과 인터렉션에서 발생할 수 있는 예외로, 예외 처리를 하도록 강제!

  • FileNotFoundException
  • IOException
  • SQLException

- UnChecked Exception

주로 프로그램 내부에서 발생할 수 있는 예외 예외 처리를 강제하지는 않지만 너는 강제하도록

 

처리법

1. throw new : 바로 던지기 

개발자가 명시적으로 예외를 발생시키는 데 사용.

 

2. throws 미루기

상위 메서드에서 예외처리를 하겠다고 미룸. 보통 Spring에서는 사용자와 최접점에 있는 구역(controller)에서 예외를 처리한다. (어럼풋 떠오르는 MVC모델..)

 

++ 예외 메시지도 Enum값으로 만들어서 처리가능~

public enum ErrorMessage {
    NO_NUMERIC_VALUE(" 0과 9 사이 숫자를 입력해주세요."), NUMBER_RANGE_IS_WRONG(" 3이상 20이하의 숫자를 입력해주세요."),
    WRONG_LENGTH(" 하나의 문자를 입력해세요"), WRONG_FORMAT(" 괄호 안 문자 중,하나의 문자만 입력해주세요");

    String errorMessage ="[ERROR]";

    ErrorMessage(String errorMessage){
        this.errorMessage += errorMessage;
    }

    public String getErrorMessage(){
        return errorMessage;
    }
}

 

마무리

자바의 아키텍처적인 부분을 배우니 점점 빨리 팀원들 하고 프로젝트로 뭔가 만들고 싶은 마음이 생겨난다. 

주말에 혼자 해보면 되지 않겠냐는 의문은 가볍게 넘어가도록 하겠습니다. 

 

아 오늘.. 알고리즘.. 예외 알고리즘.. 배웠다 :)