자바에서 제네릭이 가장 자주 쓰이는 곳이 바로 컬렉션 프레임워크입니다.List, Set, Map 같은 컬렉션은 거의 대부분 제네릭으로 사용되죠.제네릭을 잘 이해하면,더 안전하게, 더 깔끔하게, 형변환 없이 코드를 작성할 수 있습니다. List – 순서가 있는 값들의 목록 List는 하나의 타입을 가진 값들의 순서 있는 집합입니다. 순서대로 데이터를 저장하고, 인덱스로 접근할 수 있어요.T는 이 리스트에 담을 값의 타입을 의미합니다.예를 들어List ➡ 문자열만 저장할 수 있음List ➡ 정수만 저장할 수 있음List ➡ 사용자 객체만 저장할 수 있음값을 추가(add) 하고,순서(index) 에 따라 꺼낼 수 있으며,중복도 허용합니다. 👉 제네릭 덕분에 리스트 안에 어떤 타입의 값만 담을지 명확하게 ..
전체 글
개발 여행에 대한 기록와일드카드 란? 자바에서 컬렉션을 사용하다 보면 이런 코드들을 만나게 됩니다List strList = new ArrayList();List objList = new ArrayList();objList = strList; // ❌ 컴파일 오류!❓ “어? String은 Object의 자식인데, 왜 안 될까?”바로 이 순간부터 머릿속에 물음표가 생기기 시작합니다. 왜 안 되는 걸까요?자바는 제네릭 타입에 대해 다형성을 허용하지 않습니다.즉,String은 Object의 자식이지만List은 List의 자식이 아닙니다!예를 들어, 자바가 List을 List로 대입하는 걸 허용했다고 가정해 봅시다.List strList = new ArrayList();List objList = strList; // ← 허용됐다..
자바 개발을 하다 보면 아래의 코드와 같이 👇List names = new ArrayList();List이나 Map 처럼 꺽쇠() 안에 뭔가 들어가는 코드를 자주 보게 됩니다.바로 이것이 제네릭스(Generics) 문법입니다. 처음엔 생소할 수 있지만,자바 컬렉션을 제대로 쓰고, 안정적인 코드를 작성하기 위해 꼭 필요한 개념입니다.이번 글을 통해 제네릭이 무엇인지, 왜 필요한지, 그리고 어떻게 쓰는지충분히 이해할 수 있도록 하나씩 차근차근 설명해보겠습니다. 제네릭스란?타입을 코드에서 미리 정하지 않고, 나중에 사용할 때 정할 수 있게 해주는 문법입니다.쉽게 말하면,'무엇이든 담을 수 있는 박스(Box)'📦 를 만들고,사용할 때 그 박스 안에 넣을 물건의 종류(타입) 를 나중에 결정하는 거예요.B..
Object란? 자바에서 모든 클래스의 조상 Object는 자바에서 존재하는 모든 클래스의 ‘최상위(Top) 클래스’입니다. 자바에서는 우리가 새로 만드는 클래스들이 특별히 상속을 명시하지 않아도,자동으로 java.lang.Object 클래스를 상속받습니다.public class MyClass { // Object를 명시적으로 상속하지 않아도 자동 상속!}위 코드도 실제로는 아래처럼 됩니다👇public class MyClass extends Object {}즉, 우리가 사용하는 String, Integer, ArrayList, Scanner, File 등 모든 클래스는 Object의 자식이에요. 클래스 계층 구조 예시Object├── String├── Integer├── ArrayList│ ..
최소공배수란? 두 수 이상이 공통으로 가지는 배수 중 가장 작은 값을 의미합니다. 예시숫자배수1212, 24, 36, 48, 60, 72, ...1818, 36, 54, 72, ... 두 수 12와 18의 공통 배수는36, 72, ... 입니다. 👉 이 중 가장 작은 수는 36입니다.즉, 최소공배수 LCM(12, 18) = 36 입니다. 특징두 수가 공통으로 나눌 수 있는 가장 작은 배수반복되는 주기를 찾을 때 유용최대공약수와 곱셈 관계로 연결됨실무에선 최대공약수(GCD)를 이용해 빠르게 계산 최대공약수와 최소공배수의 차이구분의미예시 (12, 18 기준)최대공약수 (GCD)두 수를 나눌 수 있는 가장 큰 수6최소공배수 (LCM)두 수로 나눌 수 있는 가장 작은 수36 📌 공식 관계GCD(a,b..
최대공약수란(GCD)?두 수 이상에서 모두 나누어 떨어지는 가장 큰 수를 의미합니다. 예시숫자약수121, 2, 3, 4, 6, 12181, 2, 3, 6, 9, 18 두 수 12와 18의 공통 약수는1, 2, 3, 6 입니다. 👉 이 중 가장 큰 수는 6입니다.즉, 최대공약수 GCD(12, 18) = 6 입니다. 특징두 수의 공통된 약수 중 가장 큰 수나눗셈 연산을 활용하여 빠르게 계산 가능최소공배수와는 공식적으로 연관됨수학뿐 아니라 코딩 테스트, 암호학 등에도 활용 실습 예제1) 기본 방식 (모든 약수 검사)// 기본 약수 검사 방식public static int basicGCD(int a, int b) { int gcd = 1; for (int i = 1; i ❌ 단점: 반복이 많아..
자바에는 배열과 컬렉션을 다룰 때 아주 유용한 클래스가 있습니다.바로 Arrays 클래스와 Collections 클래스입니다.이 두 클래스는 자바 개발자에게 중요한 존재입니다.이번 글에서는 두 클래스의 주요 기능을 정리해보겠습니다. Arrays 클래스 자바에서 배열(int[], String[] 등)은 기본적인 데이터 저장 방식입니다.하지만 배열은 크기가 고정되어 있고, 편리한 조작 기능이 많지 않습니다.이런 단점을 보완하기 위해 자바는 java.util.Arrays라는 유틸리티 클래스를 제공합니다. 개념 설명Arrays 클래스는 배열을 정렬, 복사, 검색, 출력하는 등 다양한 기능을 제공하는 정적(static) 메서드 모음 클래스입니다.배열을 다룰 때 불편했던 작업들을 간단한 메서드 호출 한 줄로 ..
자바에서 컬렉션을 순회(탐색)할 때 가장 많이 쓰이는 방식은 for-each 문입니다.하지만 반복 중에 요소를 추가하거나 삭제하거나, 혹은 양방향 탐색을 하려면 Iterator, ListIterator, Enumeration 같은 반복자(Iterator 계열)가 더 강력합니다. 이번 글에서는 이 세 가지 반복자를 차례대로 비교하고, 언제 어떤 걸 써야 하는지 알아보겠습니다. Iterator Iterator는 컬렉션(List, Set 등)의 요소를 하나씩 꺼내는 인터페이스입니다. List, Set 등 대부분의 컬렉션에서 지원되며, 요소를 하나씩 꺼내는 표준적인 방법입니다.💡 우리가 보통 사용하는 for-each 문도 내부적으로 Iterator를 사용합니다. 주요 메서드 메서드설명hasNext()다..
Map이란? Key와 Value를 한 쌍으로 저장하는 컬렉션Map은 키를 기준으로 데이터를 저장하고 찾는 구조입니다.하나의 키에 하나의 값을 매핑합니다.키는 중복될 수 없고, 값은 중복될 수 있습니다. 예를 들어,주민등록번호 ➡ 이름상품코드 ➡ 상품명국가코드 ➡ 국가명와 같이 어떤 값을 고유한 키로 구분해서 저장할 때 사용합니다. 키워드Key: 데이터를 찾기 위한 고유한 식별자 (중복 불가)Value: 실제 저장하고 싶은 값 (중복 가능) Map을 써야 하는 상황 예시 상황설명아이디로 회원정보 찾기id ➡ User 객체 저장상품 코드로 상품명 조회상품코드 ➡ 상품명 저장국가 코드로 국가명 찾기KR ➡ 대한민국, US ➡ 미국 특징항목설명구조Key-Value 구조Key고유한 식별자 (중복 불가)..
Set이란?중복을 허용하지 않는 데이터 모음 Set은 순서를 보장하지 않고, 중복을 허용하지 않는 컬렉션입니다.대표 구현체는 HashSet, LinkedHashSet, TreeSet이 있습니다. 예를 들어,회원 ID가 같은 ID가 있으면 안 되겠죠?주민번호도 중복으로 존재하면 안 됩니다!이런 상황일 때 Set을 사용합니다.Set ids = new HashSet();ids.add("wooZzing");ids.add("test");ids.add("wooZzing"); // ID 중복!! ❌ 안 들어감!System.out.println(ids); // [wooZzing, test]✔️ 결과: 중복된 "wooZzing"은 한 번만 저장됨 Set을 사용하는 이유상황 예시Set이 적합한 이유출석부, 회원 ID, 이..