자바 공부를 하고 자바로 알고리즘을 풀면서도 참 못했던게 내부 동작코드 이해하고 공부하는거였는데..
사실상 학교에서는 하나하나 알려주지 않으니 스스로 공부했어야 했던건데 그러기가 쉽지 않았다(핑계인가.. 암튼)
덕분에 이렇게 수업을 들으며 부족한 부분을 채우게 돼서 새롭게 학습했던 것들, 제대로 알고있지 않았던 것들, 복습하며 익혔던 것들을 좀 정리해서 머릿속에 차곡차곡 넣어보려고 한다. 그래서 두서는 없다
- 최대 공약수를 구할 때 보통은 아래의 코드를 떠올리는데
- 훨씬 더 수학적으로 빠르게 푸는 방법은 아래처럼 유클리드 호제법을 이용하는 것이다
- 유클리드 호제법은 한 마디로 "a,b가 최대 공약수 G를 가질 때 a,b를 나눈 나머지는 G의 배수다" 라는 것이다.
- 이를 증명하는 내용은 구글링을 통해 이를 증명하는 내용은 구글링을 통해 이해했는데 https://sseong40.tistory.com/3 여기에 아주 잘 쓰여있었다
- 결국은 r이 0이 될 때까지 a값을 구하면 그 숫자가 최소공배수라는 것인데 쉽게 지나칠 수 있는 전제는 r이 a를 b로 나눈 나머지이기 때문에 b보다 클 수 없다는 것이다. 이 부분을 기억하며 증명을 읽어보면 이해에 도움이 된다.
자바에서 인스턴스 내부 클래스는 4가지가 있다.
각각의 특징과 Iterator를 익명함수로 만드는 이유는 다음과 같다.
1. 인스턴스 내부 클래스
- 특징
- 외부 객체(Outer)에 소속된다
- 외부 인스턴스 멤버(message)에 쉽게 접근할 수 있다
2. 정적 내부 클래스 (static nested class)
- 특징
- 바깥 클래스 객체와 독립적으로 존재한다
- 외부 클래스의 static 멤버에는 접근 가능하다
- 단, 인스턴스 멤버에는 직접 접근이 불가능 하다
3. 지역 내부 클래스
- 특징
- 메서드 내부에 정의되는 클래스.
정의된 메서드 내에서만 사용 가능- 외부 클래스의 static 멤버에는 접근 가능하다
- 단, 인스턴스 멤버에는 직접 접근이 불가능 하다
4. 익명 내부 클래스
- 특징
- 이름이 없는 클래스.
- 보통 인터페이스나 추상 클래스 구현 시, "한 번만 쓰는 경우"에 활용.
- 리스너, 콜백 등
- 자바에서 데이터(객체)를 효율적으로 저장, 검색, 삭제, 정렬, 관리하기 위해 제공되는 자료구조 및 알고리즘의 표준화된 클래스 집합.
- 즉, 자료구조 + 알고리즘을 표준 인터페이스와 클래스 형태로 제공해서 개발자가 쉽게 사용하도록 만든 것.
- 모든 클래스는 java.util 패키지에 속해 있음.

1. Collection 인터페이스 계열
Collection 인터페이스가 이미 Iterable을 상속함 → 그래서 ArrayList, HashSet 같은 컬렉션을 for-each에서 사용할 수 있음
출처 : https://m.blog.naver.com/PostView.nhn?blogId=writer0713&logNo=220877874725&proxyReferer=https:%2F%2Fwww.google.com%2F
2. Map 인터페이스 계열
3. Iterable 인터페이스 계열
- 핵심 메서드
boolean hasNext() : 다음 요소가 있는지
E next() : 다음 요소 반환
void remove() : 현재 요소 삭제
🔹오늘 내가 잘 한점
이미 알고 있던 부분도 다시 한 번 꼼꼼하게 짚고 넘어가며 내것으로 만들기 위해 노력했다
🔹오늘 겪은 문제점 및 해결 방법
구현된 알고리즘을 사용만 해봤지 자바로 직접 구현하는건 C언어 이후로 정말 오랜만이었다. 그래서 헷갈리는 부분도 많았고 구현에 어려움을 느낀 부분도 많았다. 반복적으로 코드를 작성하고 내부 논리를 완벽하게 이해하는 방법밖에는 해결 방법이 없는 것 같다
🔹오늘 배운 것
자바 collections framework를 다시 한 번 정리할 수 있었다. 약간 모호하게 머릿속에 자리잡았던 것들이 좀 더 명확해진 것 같다.
데이터를 나열하는 collection, key-value쌍의 Map, 순회 객체를 제공하는 Iterable 잊지말자!