[Java] 자바 알고리즘 수업 정리 1 | 유클리드 호제법, Inner Class, Java Collections Framework

신효경·2025년 8월 24일
0

자바 공부를 하고 자바로 알고리즘을 풀면서도 참 못했던게 내부 동작코드 이해하고 공부하는거였는데..
사실상 학교에서는 하나하나 알려주지 않으니 스스로 공부했어야 했던건데 그러기가 쉽지 않았다(핑계인가.. 암튼)
덕분에 이렇게 수업을 들으며 부족한 부분을 채우게 돼서 새롭게 학습했던 것들, 제대로 알고있지 않았던 것들, 복습하며 익혔던 것들을 좀 정리해서 머릿속에 차곡차곡 넣어보려고 한다. 그래서 두서는 없다


📕유클리드 호제법

  • 최대 공약수를 구할 때 보통은 아래의 코드를 떠올리는데
  • 훨씬 더 수학적으로 빠르게 푸는 방법은 아래처럼 유클리드 호제법을 이용하는 것이다
  • 유클리드 호제법은 한 마디로 "a,b가 최대 공약수 G를 가질 때 a,b를 나눈 나머지는 G의 배수다" 라는 것이다.
  • 이를 증명하는 내용은 구글링을 통해 이를 증명하는 내용은 구글링을 통해 이해했는데 https://sseong40.tistory.com/3 여기에 아주 잘 쓰여있었다
  • 결국은 r이 0이 될 때까지 a값을 구하면 그 숫자가 최소공배수라는 것인데 쉽게 지나칠 수 있는 전제는 r이 a를 b로 나눈 나머지이기 때문에 b보다 클 수 없다는 것이다. 이 부분을 기억하며 증명을 읽어보면 이해에 도움이 된다.

📕자바의 내부 클래스(Inner Class)

자바에서 인스턴스 내부 클래스는 4가지가 있다.

  1. 인스턴스 내부 클래스
  2. 정적 내부 클래스 (static nested class)
  3. 지역 내부 클래스
  4. 익명 내부 클래스

각각의 특징과 Iterator를 익명함수로 만드는 이유는 다음과 같다.

1. 인스턴스 내부 클래스

  • 특징
    • 외부 객체(Outer)에 소속된다
    • 외부 인스턴스 멤버(message)에 쉽게 접근할 수 있다

2. 정적 내부 클래스 (static nested class)

  • 특징
    • 바깥 클래스 객체와 독립적으로 존재한다
    • 외부 클래스의 static 멤버에는 접근 가능하다
      • 단, 인스턴스 멤버에는 직접 접근이 불가능 하다

3. 지역 내부 클래스

  • 특징
    • 메서드 내부에 정의되는 클래스.
      정의된 메서드 내에서만 사용 가능
    • 외부 클래스의 static 멤버에는 접근 가능하다
      • 단, 인스턴스 멤버에는 직접 접근이 불가능 하다

4. 익명 내부 클래스

  • 특징
    • 이름이 없는 클래스.
    • 보통 인터페이스나 추상 클래스 구현 시, "한 번만 쓰는 경우"에 활용.
      • 리스너, 콜백 등

📕 컬렉션 프레임워크란?

  • 자바에서 데이터(객체)를 효율적으로 저장, 검색, 삭제, 정렬, 관리하기 위해 제공되는 자료구조 및 알고리즘의 표준화된 클래스 집합.
  • 즉, 자료구조 + 알고리즘을 표준 인터페이스와 클래스 형태로 제공해서 개발자가 쉽게 사용하도록 만든 것.
  • 모든 클래스는 java.util 패키지에 속해 있음.

자바 컬렉션 프레임워크는 크게 3가지 주요 인터페이스 계층으로 구분함

1. Collection 인터페이스 계열

  • 데이터를 단순히 모아두는 역할
  • 세부적으로 List, Set, Queue 등이 있음

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 인터페이스 계열

  • Key-Value 쌍으로 데이터를 저장하는 구조
  • Collection을 상속하지 않음

3. Iterable 인터페이스 계열

  • for-each 문에서 쓸 수 있도록 iterator() 메서드를 제공하는 인터페이스
  • 컬렉션에 저장된 요소들을 순회(반복)할 수 있게 해주는 별도의 인터페이스
  • Iterator, ListIterator, Enumeration 등이 해당
    • Iterator 인터페이스
      • 실제로 컬렉션 안의 요소를 하나씩 꺼내는 도구
      • 내부 포인터(cursor)를 이동시키면서 요소에 접근
        • 핵심 메서드
          boolean hasNext() : 다음 요소가 있는지
          E next() : 다음 요소 반환
          void remove() : 현재 요소 삭제

🔹오늘 내가 잘 한점
이미 알고 있던 부분도 다시 한 번 꼼꼼하게 짚고 넘어가며 내것으로 만들기 위해 노력했다

🔹오늘 겪은 문제점 및 해결 방법
구현된 알고리즘을 사용만 해봤지 자바로 직접 구현하는건 C언어 이후로 정말 오랜만이었다. 그래서 헷갈리는 부분도 많았고 구현에 어려움을 느낀 부분도 많았다. 반복적으로 코드를 작성하고 내부 논리를 완벽하게 이해하는 방법밖에는 해결 방법이 없는 것 같다

🔹오늘 배운 것
자바 collections framework를 다시 한 번 정리할 수 있었다. 약간 모호하게 머릿속에 자리잡았던 것들이 좀 더 명확해진 것 같다.
데이터를 나열하는 collection, key-value쌍의 Map, 순회 객체를 제공하는 Iterable 잊지말자!

0개의 댓글