2022.11.10.THU

ronglong·2022년 11월 10일
0

코드스테이츠 Day16

<컬렉션(Collection)>

  1. 열거형(Enum)
  • 연관된 상수들을 모아놓는 집합.
  • switch문의 조건()에서도 사용 가능.
  • 상수명 중복 회피 가능.
  • public static final같은 거 안 써도 돼서 코드의 가독성 높임.
  1. 제네릭(Generic)
  • 타입을 포괄적으로 (미)지정하여(==일반화하여) < T > , 하나의 클래스로 다양한 타입의 객체 생성 가능.
  • 타입 매개변수에 클래스 타입만 쓸 수 있음(매개변수로 객체가 필요해서). 변수 기본 타입X
    https://velog.io/@hadoyaji/int%EC%99%80-Integer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80
  • 클래스명<타입> 변수명 = new 클래스명<>();
  • 클래스 변수(=static)는 클래스 내에서 동일한 값을 공유하므로, 제네릭 타입 매개변수 < T > 사용 못 함.
  • 타입 매개변수에 다형성 적용 가능. extends, implements로 클래스 범위 한정 및 확장.
  • 제네릭 메서드도 있다. 반환 타입 앞에 타입 매개변수 넣으면 됨. static도 가능. 얘는 그냥 클래스 안에서만 메서드를 쓴다는 얘기라서 클래스 변수랑 다름.
  • 와일드 카드 : 메서드의 매개변수에서 타입 다음에 < ? extends T >, < ? super T > 를 써서, 클래스 범위를 제한할 수 있다. ~하위 클래스만. ~ 상위 클래스만.
  1. 예외 처리(Exception Handling)
  • 목적 : 프로그램의 비정상 종료 방지, 정상 실행 상태 유지
  • 에러 클래스 순위(위에서 부터 조상)
    • Throwable (혼모노)
    • Errors (진짜 치명적인 에러) / Exceptions (예외, 에러의 조상)
    • Exceptions가 둘로 나뉨 : compile error / runtime error
    • 컴파일 에러(checked 예외)는 컴파일러가 프로그램 실행 전에 오류 알려줌.
    • 런타임 에러(unchecked 예외)는 프로그램이 실행될 때 남(JVM이 감지)
    • 예외 처리
    try {예외 발생 가능한 코드} 
    catch(에러 타입과 변수){예외 발생시 실행 코드} 
    finally{무조건 항상 실행하는 코드}
  • throw / throws : (예외 전가)throws가 좀 이해하기 어려웠는데, throw는 일부러 에러를 발생시키는 거고, throws는 에러가 나도 해당 에러의 책임을 지지 않고(다른 누군가에게 떠넘기고) 그냥 메서드 정상 실행 시켜버림ㅋ
  • 근데 이게 계속 떠넘기다가 최상위한테까지 떠넘겨서 거기서도 처리 못하는 예외면, 프로그램 강제 종료 엔딩이라고 한다 ㅎㅅㅎ. (구글링해서 봤는데 링크 잃어버림,,)
  • 에러 출력별 차이 ( getMessage() / toString() / printStackTrace() )
    https://lnsideout.tistory.com/entry/JAVA-etoString-egetMessage-eprintStackTrace-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%AC
  1. 컬렉션 프레임워크(Collection Framework)
  • 여러 데이터의 집합(컬렉션)을 다루기 쉽게 메서드를 모아놓은 것.
  • 컬렉션 프레임워크의 주요 인터페이스
    - ArrayList : list 순서 있고, 차례로 -- 순차적 데이터 처리에 좋음
    - LinkedList : list 순서 있고, 연결로 -- 중간 데이터 추가/삭제 쉬움
    - HashSet : set 순서 없고, 중복 비허용
    - TreeSet : set 순서 없고, 중복 비허용, 노드 숫자 따라 오름차순 정렬됨
    - HashMap
    • key객체와 value객체로 이루어진 entry객체로 구성됨. key는 중복 불가능.
    • 쌍으로 구성된 엔트리이므로 반복자(iterator())호출 불가.
    • 따라서, ketSet() or entrySet()을 통해 Set 형태의 Map.Entry<String, Integer> 객체를 만들어서 반복자 호출.
  1. 기타 정리한 것들
  • 리스트는 배열과 달리 내부 크기 자동 관리함. https://suzyalrahala.tistory.com/24
  • opt + cmd + L : 코드 줄 자동 정렬
  • ctr + cmd + F : 창 크기 최대화 / 최소화

<느낀 점>
개강 후 3주 정도가 되었다.
오늘 뭔가 학습 관련 고민 상담을 받은 수강생들이 많았는지, 오후 줌 미팅에서 공부법 관련한 이야기를 들었다.
프로그래밍 공부에서 블로깅은 맨 마지막이고 혼자서 활용해보고 실습하는 시간이 더 먼저라고 들었는데, 블로깅 포기 못 해...
대부분 가져다 쓰는 거라도, 다시 보면서 내가 생각하기에 중요한 내용만 추려서 정리하면 훨씬 머리에 남는 기분이기 때문이다.

오늘 공부한 내용 중 HashMap은 파이썬의 딕셔너리와 비슷한 느낌이었다. 하지만 파이썬보다 뭔가 훨씬 복잡해,,

HashMap의 반복자 만드는 부분에서 반복자 호출을 위해 Set 형태의 객체를 만들 때, Set의 타입 매개변수를 Map.Entry<String, Integer> 이렇게 쓰는 게 이해되지 않았다.
근데 다시 쭉 코드를 읽어보니 HashMap<String, Integer> 이렇게 썼던 걸, Map.Entry<String, Integer>라고 쓰는 느낌.
어쨌든 내용은 HashMap의 Entry 객체를 Set의 타입 매개변수로 가져와서 Set 객체를 만들겠다는 소리였다.

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();

0개의 댓글