코딩성장스토리

자바 공부하면서 주의한것 본문

백 엔드/java

자바 공부하면서 주의한것

까르르꿍꿍 2021. 12. 4. 17:42

length와 length()의 차이점

length는 배열의 길이를 알 때 사용 하는 점이고

length()는 문자열의 길이를 알 때 사용 하는 것이다.

 

 

예외처리 하는 법

객체 지향 공부를 하면서 예외처리를 할 때 많은 예외들을 정리해야 할 떄가 있다.

그럴 때 함수 속에 함수를 넣는 식으로 계속 예외처리를 만드는 게 효율 적임을 느꼈다.

밑에 예시가 그렇다

public void inputanswer(String userinput){
        String[] tryanswer=checkinputint(userinput).split("");
        DataTuils.setUsernum(tryanswer);
    }
    //넣은 값이 숫자인지 확인
    private String checkinputint(String userinput) throws IllegalArgumentException{//숫자만 입력되었는지 확인
        try{
            Integer.parseInt(userinput);
        }catch (NumberFormatException e){
            throw new IllegalArgumentException();
        }
        return checkinputlenth(userinput);
    }
    //답의 길이가 3개인지 확인
    private String checkinputlenth(String userinput) throws IllegalArgumentException{
        if(userinput.length()!=3)
            throw new IllegalArgumentException();
        return checkinputoverlap(userinput);
    }
    //답의 숫자가 중복되는지 확인
    private String checkinputoverlap(String userinput) throws IllegalArgumentException{
        if(userinput.charAt(0)==userinput.charAt(1)
                || userinput.charAt(0)==userinput.charAt(2)
                || userinput.charAt(1)==userinput.charAt(2))
            throw new IllegalArgumentException(userinput);
        return validinput(userinput);
    }
    //답에 0이 포함되어 있는 지 확인
    private String validinput(String userinput) throws IllegalArgumentException{
        if(userinput.contains("0"))
            throw new IllegalArgumentException();
        return userinput;
    }

static의 활용

 

static은 객체를 처음 배울 때 사용법을 잘 몰라서 거리 감이 느껴 진다.

static의 장점

  1. 1. 메모리를 효율적으로 사용할 수 있다. 생성할 마다 인스턴스가 힙에 올라가는 것이 아니라 고정 메모리이므로 효율적입니다.
  2. 속도가 빠르다. 객체를 생성하지 않고 사용하기 때문에 빠릅니다.

 

Hashmap

HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조입니다. 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없습니다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치됩니다. HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보입니다.

 private static Map<Long, Member> store = new HashMap<>(); //키는 long 값은 member라는 자료형이르 설정
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);  //map에 memberid를 키로 member을 값으로 
        return member;
    }

    @Override
    public void delete(String string){
        Optional<Member> member= findByName(string);
        store.remove(member.get().getId());//member의 아이디 즉 키의 값을 지움
    }

Optional

이 Optional은 spring 공부하면서 사용하는 것을 보고 찾아봤다.

개발을 할 때 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다. NPE를 피하기 위해서는 null을 검사하는 로직을 추가해야 하는데, null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 로직이 상당히 번거롭다. 그렇기 때문에 null 대신 초기값을 사용하길 권장하기도 한다 라고 한다.

Java8에서는 Optional<T> 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 때문에 각종 메소드를 제공해준다.


public final class Optional<T> {
 
  // If non-null, the value; if null, indicates no value is present
  private final T value;
   
  ...
}


public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id));
    } //이 코드에서 Optional을 사용했는데 store라는 변수에 NULL값이 들어가 있을 경우를 고려해서 사용했다.

 

 

'백 엔드 > java' 카테고리의 다른 글

자바 개념과 이해 2  (0) 2022.04.07
자바의 역사와 이  (0) 2022.04.02
자바:Java(4)  (1) 2021.10.28
자바:Java(3)  (0) 2021.10.27
자바:Java(2)  (0) 2021.10.26