728x90
반응형

📚 목차

  1. 이게 왜 중요한데?
  2. 표 하나로 비교 끝!
  3. 언제 뭘 써야 하나요?
  4. 마무리 요약 (진짜 1분 컷)

1. 이게 왜 중요한데?

자바 개발하면서 List, Set, Map 구분 못 하면...
👉 NullPointerException, IndexOutOfBoundsException, 동기화 오류
줄줄이 터집니다.
그럼 PM이 와서 말하죠:

“그거... 그냥 ArrayList 말고 HashSet 쓰면 안 되나?”


2. 표 하나로 비교 끝! ✅

구분ListSetMap
중복 허용 ✅ O ❌ X ✅ Value만 O
순서 유지 ✅ O ❌ X (HashSet), ✅ TreeSet은 정렬됨 ❌ X (정렬 불가)
인덱스로 접근 ✅ O (get(index)) ❌ X ❌ X
Key-Value 구조 ❌ X ❌ X ✅ O
대표 클래스 ArrayList, LinkedList HashSet, TreeSet HashMap, TreeMap
 

3. 언제 뭘 써야 하나요?

상황추천 컬렉션
데이터 순서 유지 + 중복 허용 ArrayList
중복 없이 빠르게 저장 HashSet
정렬된 데이터 필요 TreeSet, TreeMap
Key로 조회 필요 HashMap
삽입/삭제가 많음 LinkedList
 

4. 마무리 요약 (1분 컷 핵심)

List<String> list = new ArrayList<>(); // 순서 O, 중복 O
Set<String> set = new HashSet<>();     // 순서 X, 중복 X
Map<String, String> map = new HashMap<>(); // Key-Value

📌 기억법:

  • List: 줄세우기 좋아함
  • Set: 중복 싫어함
  • Map: Key로 놀고 Value로 살고
728x90
반응형
728x90
반응형

🧭 목차

  1. 객체지향 언어란?
  2. 클래스, 객체, 인스턴스의 차이
  3. 객체지향의 3대 특징
  4. 객체지향의 장단점
  5. 대표적인 객체지향 언어

1. 객체지향 언어란?

**객체지향 언어(Object-Oriented Language)**는
현실 세계의 **모든 객체(자동차, 사람, 문 등)**가
자신만의 속성과 기능을 가지고 상호작용한다는 개념을
프로그래밍에 적용한 언어입니다.

  • 객체 간의 관계와 역할에 중점을 둠
  • 각 객체는 고유한 속성과 기능을 가지고 있음
  • 이 객체들이 협력하며 동작하는 구조로 소프트웨어를 구성

2. 클래스(Class), 객체(Object), 인스턴스(Instance)

구분설명
객체 프로그램에서 구현하고자 하는 대상 (예: 자동차, 회원, 게시물 등)
클래스 객체의 속성과 기능을 정의한 설계도
인스턴스 클래스를 기반으로 실제 메모리에 생성된 객체 (현실 세계의 실체)
 
 
class Car {
    String color;
    void drive() {
        System.out.println("주행 중");
    }
}

Car myCar = new Car();  // ← 이게 바로 인스턴스!

3. 객체지향 언어의 3대 특징

🔒 캡슐화 (Encapsulation)

  • 객체의 내부 구조를 외부에 은닉
  • 필요한 정보만 외부에 public으로 노출
  • 자바에서는 private, protected, public 등 접근 제어자로 구현

➡ 예:

private int age;  
public void setAge(int a) { age = a; }

👪 상속 (Inheritance)

  • 자식 클래스가 부모 클래스의 속성과 기능을 물려받는 것
  • 코드의 재사용성 높이고, 유지보수 편리
class Animal { void eat() { } }
class Dog extends Animal { void bark() { } }
  • 부모 클래스 → 슈퍼 클래스(Super Class)
  • 자식 클래스 → 서브 클래스(Sub Class)

🔄 다형성 (Polymorphism)

  • 하나의 메소드나 객체가 다양한 방식으로 동작

▪ 오버라이딩 (Overriding)

  • 부모 메소드를 자식 클래스에서 재정의
  • 메소드명, 매개변수, 반환형 동일
@Override
public void run() {
    System.out.println("자식 클래스에서 실행");
}

▪ 오버로딩 (Overloading)

  • 같은 이름의 메소드지만 매개변수 다름
@Override
public void run() {
    System.out.println("자식 클래스에서 실행");
}

4. 객체지향 프로그래밍의 장점과 단점

✅ 장점

  • 재사용성: 상속으로 기존 코드 활용
  • 생산성 향상: 독립적인 객체 개발
  • 자연스러운 모델링: 현실 세계와 유사
  • 유지보수 우수: 캡슐화로 영향 최소화

❌ 단점

  • 설계 복잡: 개념 파악 및 초기 설계 시간 소요
  • 실행 속도 저하: 절차형 언어보다 느릴 수 있음
  • 코딩 난이도: 복잡한 구조로 인한 학습 장벽

5. 대표적인 객체지향 언어

언어특징
Java 가장 널리 쓰이는 객체지향 언어, 플랫폼 독립적
C++ C 언어의 확장, 다중 상속 지원
C# 닷넷(.NET) 기반 객체지향 언어
Python 인터프리터 기반, 동적 타이핑, 강력한 객체지향 지원
 

 

728x90
반응형
728x90
반응형

“ArrayList? Set? Hash 뭐시기? 그냥 배열에 때려 넣으면 안 돼요?”


1. Java Collections Framework(JCF)란?

JCF는 자바에서 데이터를 그룹으로 관리하기 위한 자료구조 라이브러리 집합입니다.
배열을 대체하고, 더 강력하게 데이터를 처리할 수 있게 해줍니다.


2. 컬렉션 상속 구조도

         ┌──────────┐
         │Collection│
         └────┬─────┘
      ┌────────┼────────┐
     List      Set     Queue
      │         │        │
┌─────┴─────┐  ┌┴┐     ┌─┴─┐
ArrayList  ... HashSet ...

※ Map은 Collection을 상속하진 않지만, 함께 묶어서 취급합니다.


3. 주요 인터페이스와 특징

✅ Set (중복 ❌, 순서 ❌)

구현체특징
HashSet 가장 빠른 접근 속도, 순서 없음
TreeSet 자동 정렬 가능 (오름차순/내림차순 설정 가능)
 

✅ List (중복 ⭕, 순서 ⭕)

구현체특징
ArrayList 인덱스 기반, 조회 성능 우수
LinkedList 삽입/삭제에 유리
Vector 동기화 지원. 구식이라 거의 안 씀
 

✅ Queue (선입선출 구조)

구현체특징
LinkedList 양방향 연결 구조
PriorityQueue 우선순위 기반 처리 가능
 

✅ Map (Key 중복 ❌, Value 중복 ⭕

구현체특징
HashMap 가장 자주 쓰이며, null 허용
TreeMap 자동 정렬
Hashtable 동기화 지원. null 금지, 구식
 

4. 언제 어떤 컬렉션을 써야 할까?

상황추천 컬렉션
중복 없이 저장 HashSet
인덱스 접근, 조회 위주 ArrayList
삽입/삭제 잦음 LinkedList
Key-Value 저장 HashMap
정렬된 데이터 필요 TreeSet, TreeMap
스레드 동기화 필요 Vector, Hashtable (하지만 잘 안 씀)
 

5. 한줄 요약

"Java 컬렉션은 목적에 맞게 잘 골라 써야 성능이 살아납니다!"

 

728x90
반응형

+ Recent posts