1주차 precourse-onboarding
Array와 비슷하지만 사이즈를 정해주지 않아도 된다. 주로 제네릭을 통해 자료형을 선언해준다.
메소드 : add, get, remove
[JAVA] - Arrays.asList()와 List.of()의 차이 (tistory.com)
요약 : asList()와 of() 둘다 List 값에 대한 삽입, 삭제는 불가능.
변경(set, replace) 여부 : asList()만 가능
Null 허용 여부 : asList()만 가능, .of()는 NPE 유발.
int answer = Integer.*MAX_VALUE*;
처음에 이게 뭔가해서 구글링해봤다.
represents the maximum positive integer value that can be represented in 32 bits 라고 한다.
그냥 변수 초기 설정 문장이었다..
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt#설명
https://www.javatpoint.com/java-string-to-int
→ Exception 클래스를 사용해보자.
→ 스트링으로 바꿔서 해보자
→ if else 문을 사용할까? switch를 사용할까? 무엇이 더 깔끔할까?
→ Class를 따로 만들어서 main 클래스를 더 깔끔하게?
변경 작업이 많을 경우 사용. 그렇지 않으면 String을 사용하는 것이 좋다.
→ 이 문제는 값 변경이 잦으므로 StringBuffer를 사용해보자.
막상 해보고나니 깨달은 것. 배열은 삽입, 삭제가 불가능하다는 것.
→ List로 넘어가서 해보자.
원래 배열 [] 형식은 List와 달리 그 크기를 정해주어야 하는데, String[]은 Array타입임에도 크기 선언에 영향을 받지 않는다. 좀 더 공부해보자.
Error는 크게 Compile Error와 Runtime Error로 나누어진다.
예외 상황 환경에서 동작하는 클래스를 만들때 해당 기능을 수행하는 메소드에 throws 구문을 추가하여 예외 상황 처리를 강제하게 한다.
사용자 정의 예외 클래스를 만드려면 Exception 클래스를 상속받아 구현하면 된다.
예외처리 유형은 크게 Checked Exception과 Unchecked Exception으로 나누어진다.
Checked Exception : Exception클래스를 상속받아 구현된 클래스(RuntimeException클래스 제외)
컴파일러에 의해 강제로 예외 처리가 요구된다.
Unchecked Exception : RuntimeException 클래스를 상속받아 구현된 클래스. 강제로 예외 처리가 요구되지는 않지만 필요에 따라 예외 처리 가능.
예외는 묶어서 표현 가능하지만 만약 부모 자식 관계라면 부모 클래스만 명시해 주어야 한다.
throws : 현재 메서드에서 ‘특정 예외 처리를 하지 않겠다’는 의미이다. 현재 메서드를 호출한 곳에서 해당 예외 클래스에 대한 처리(try ~ catch)를 해주어야 한다.
Easy
→ 굳이? 그냥 String + 메소드 사용하면 쉬울듯
의도치 않게 Collection Framework에 대해 공부를 많이 했다..
5번까지 하면서 계속 느끼는 점 : 자료형만 알아도 참 문제들이 쉬울 것 같다.
자료형에 대해 아는 만큼 정말 많이 보이겠다는 생각을 했다.
Collections.emptyList(); 이게 자꾸 발목을 잡았다.
알고 보니 ‘예외 케이스를 처리할 때 빈 리스트를 반환하기 위해서 있는 것’ 라고 한다.
→ 바로 수정.. ArrayList로!
이거 카카오톡 공채 코딩 테스트에서 나온 거랑 비슷한 형태이다.
근데 어려워보인다.
https://kim6394.tistory.com/205
https://jamesdreaming.tistory.com/81
https://d2.naver.com/helloworld/19187
ASCII = American Standard Code for Information Interchange
가~힣까지 코드를 할당한다. 이를 컴퓨터가 인식할 수 있도록 8비트 단위 형태로 표현한 것이 인코딩이다. 조합형과 완성형으로 나눠져 있으며 완성형이 채택되었다.
N바이트 조합형
모든 자음과 모음에 영어와 특수기호를 매칭하고, ^N(Shift On)과 ^O(Shift Out)를 사용하여 한글 표현. 2~5바이트로 표현.
3바이트 조합형
초,중,종성에 1바이트씩 할당. 중성, 종성이 없는 글자를 위해 fill code를 정의함. 3바이트로 표현.
7비트 완성형
pass
2바이트 조합형
2바이트 = 16비트 → 초.중.종성에 5비트씩 할당하고 첫 1비트는 1로 표시하여 한글임을 표시하는 방식이다.
2바이트 완성형
완성된 음절을 코드와 일대일로 대응시키는 방식.
유니코드 인코딩 방식 :
한글 소리 마디 Ver
ex) 한글 → 한/글 → U+D55C / U+AE00 = 1101 0101 0101 1100 / 1010 1110 0000 0000
U+ D55C와 U+AE00은 코드 포인트 범위중 U+0800~U+FFFF에 속하므로
1110 xxxx 10xx xxxx 10xx xxxx로 인코딩.
→ (1110) 1101 (10)01 0101 (10)01 1100 / (1110) 1010 (10)11 1000 (10)00 0000
한글 완성형의 코드 범위는 U+AC00~U+D7AF이므로 무조건 3바이트 인코딩이다. 1110.10.10!
즉, 한글 완성형의 코드 범위를 2진수로 나타내면
U+AC00(가) / U+ D7AF(힣) = 1010 1100 0000 0000 / 1101 0111 1010 1111
→ (1110) 1010 . (10)11 0000 . (10)00 . 0000 / (1110) 1101 . (10)01 1110 . (10)10 1111
→ 234 . 176 . 128 / 237 . 158 . 175 → 0xEA . 0xB0 . 0x80 / 0xED . 0x9E . 0xAF
U+AC00 + ((초성 값) x 21) + 중성 값) x 28 + 종성 값이 원하는 음절의 코드 포인트 값이다.
최종 결론 : 한글 완성형 범위는 44032~55203 / 자음모음 범위는 12593~12643
클래스 내 멤버변수는 private로 선언해보자.
maximum 찾는 메소드 사용.
class 내에 메소드들을 삽입. private로 선언. RestrictException은 공통 클래스
draw.io
ctrl + Alt + l = 줄 정렬
캠퍼스 핵데이 Java 코딩 컨벤션 (naver.github.io)
메소드에서 매개변수가 변환이 될 때는 return을 굳이 안해줘도 괜찮은 듯.
Stringbuilder = 가변성
SOLID 원칙 중 D : 관계역전을 해도 유지되도록.
HashSet → Set<> = new HashSet;
Collections.frequency
String을 StringBuilder로 바꿔서 구현해보자 → 최적화
character는 연산 자체가 int로 가능하다.
ex) String은 ‘a’+’b’ = ‘ab’지만 char는 아스키숫자로 더해진다.
나머지 연산은 계산 속도가 느리다.
차라리 비트연산자를 하는 게 빠름. 다음번에 한번 해보자.
Ctrl + Alt + v : 변수추출
Ctrl + Alt + m : 메소드추출
정규식 사용법 공부해보기.
HashSet 이름 좀 더 알아볼 수 있게 바꾸자.