🔌 SPARTA/Courses

걷기반 2회차: 배열(Array와 List)

eunjiom 2026. 1. 16. 20:59

1. 배열(Array)

  • 같은 타입의 데이터 여러 개를 묶는 구조
  • 같은 타입이라 반복 처리, 규칙적인 접근 가능
  • 순서(index) 존재
  • 크기 고정(배열의 한계)
  • object: 다른 타입의 데이터를 묶는 방법

2. 객체배열

  • 클래스: 서로 다른 데이터를 하나로 묶음
  • 배열: 같은 데이터 타입 묶음 / 여러 개 객체를 관리
Menu[] menus = new Menu[2]; // 2개 메뉴가 담김

Menu menu1 = new Menu();
menu1.name = "아메리카노";
menu1.price = 3000;

Menu menu2 = new Menu();
menu2.name = "라떼";
menu2.price = 3500;

menus[0] = menu1; // 1번 아메리카노
menus[1] = menu2; // 2번 라떼

 

3. List

  • 크기가 유동적인 배열
  • 자바에서 제공: import Jaca.util.
<List<Menu> menus = new ArrayList<>();>
 기능(USB-C 규격) = 구현체(삼성충전기)
  • 특징: 크기 자동 증가
            추가 / 삭제가 쉬움
            배열의 불편함 해결
  • .add 를 통해 데이터 추가
  • Array vs List 차이점

4. ArrayList는 내부적으로 배열 사용

  • 겉으로는 List처럼 보이지만 안에서는 배열을 사용한다
List<Menu> menus = new ArrayList<>();
  •  배열이 꽉 차면 큰 배열을 새로 만들고 기존 데이터를 복사해서 교체
Object[] elementData;

 

5. size와 capacity 개념

ArrayList<Menu> menus = new ArrayList<>();
  • 처음에는 size = 0
  • 첫 add 시 내부 배열 생성
  • 기본 capacity ≈ 10 (구현 세부 사항)
  • 100개 입력 시
ArrayList<Menu> menus = new ArrayList<>(100);

 

6. 예시

  • 리스트구조 확장하기
List<Menu> menus = new ArrayList<>();

Menu americano = new Menu();
americano.name = "아메리카노";
americano.price = 3000;

Menu latte = new Menu();
latte.name = "라떼";
latte.price = 3500;

Menu juice = new Menu();
juice .name = "쥬스";
juice .price = 5000;

menus.add(americano);
menus.add(latte);
menus.add(juice);

// 메뉴가 몇 개든 관리 가능
  • 반복문 함께 사용하기
for (Menu menu : menus) {
    menu.printInfo();
}

// 메뉴 한 번에 처리 가능
  • 전체 목록 조회(메뉴 전체보기)
for (Menu menu : menus) {
    menu.printInfo();
}
  • 메뉴 전체 가격 300원 인상하기
class Menu {
    String name;
    int price;

    void printInfo() {
        System.out.println(name + " : " + price + "원");
    }
    
    void increasePrice(int amount){
	    this.price += amount; // 인상
    }
}

public class Main {
    public static void main(String[] args) {
        List<Menu> menus = new ArrayList<>();

				Menu americano = new Menu();
				americano.name = "아메리카노";
				americano.price = 3000;

				Menu latte = new Menu();
				latte.name = "라떼";
				latte.price = 3500;

				Menu juice = new Menu();
				juice.name = "쥬스";
				juice .price = 5000;

				menus.add(americano);
				menus.add(latte);
				menus.add(juice);
    

				for (Menu menu : menus) {
    				menu.increasePrice(300);
				} // +300원 인상
				
				juice.increasePrice(300);
		}
}
  • 메뉴 전체 가격 300원 인하 (0원 미만 조건 필요)
class Menu {
    String name;
    int price;

    void printInfo() {
        System.out.println(name + " : " + price + "원");
    }
    
    void increasePrice(int addPrice){
	    this.price += addPrice;
    }
    
    void decreasePrice(int amount) {
       if (this.price - amount < 0) {
	        System.out.println("가격은 0원 밑으로 내려갈 수 없습니다.");
	        return;
		    } // 0원 미만 예외 조건
		    this.price -= amount; 
    }
}

public class Main {
    public static void main(String[] args) {
        Menu menu = new Menu();
        menu.name = "아메리카노";
        menu.price = 3000;

        menu.printInfo();
    }
}

for (Menu menu : menus) {
    menu.decreasePrice(300);
}
  • 특정 가격 이상인 메뉴만 출력
for (Menu menu : menus) {
    if (menu.price >= 3500) {
        menu.printInfo();
    }
} // 3500원 이상 메뉴 출력

// 조건+반복 = 필터링
  • 메뉴 이름으로 검색
String target = "아메리카노";

for (Menu menu : menus) {
    if (menu.name.equals(target)) {
        menu.printInfo();
    }
}
  • 전체 메뉴 가격 합계 구하기
int totalPrice = 0;

for (Menu menu : menus) {
    totalPrice += menu.price;
}

System.out.println("전체 가격 합계: " + totalPrice);
  • 메뉴 판매 중지(sold out) 처리
class Menu {
    String name;
    int price;
    int stock; // 갯수
    boolean soldOut;
    
    Menu() {
        this.stock = 0;
        this.soldOut = true;
    }

    void printInfo() {
        if (soldOut) {
            System.out.println(name + " : SOLD OUT");
        } else {
            System.out.println(name + " : " + price + "원");
        }
    } // sold out
    
    void increasePrice(int amount){
	    this.price += amount; // 가격 인상
    }
   
    void decreasePrice(int amount) {
       if (this.price - amount < 0) {
	        System.out.println("가격은 0원 밑으로 내려갈 수 없습니다.");
	        return;
		    } // 0원 미만 조건
		    this.price -= amount;
    }
 
    void restock(int amount) {
        this.stock += amount;
        if (stock > 0) {
            soldOut = false;
        }
    } // sold out

    void sell(int amount) {
	    if (stock < amount) {
	        System.out.println("재고가 부족합니다.");
	        return;
	    } // 갯수가 작을 때 출력

	    stock -= amount; // 실행할 때마다 갯수 줄어듬

	    if (stock == 0) {
	        soldOut = true;
	    }
	}
}
for (Menu menu : menus) {
    menu.printInfo();
}

'🔌 SPARTA > Courses' 카테고리의 다른 글

걷기반 4회차: 상속과 제네릭, enum  (1) 2026.01.23
걷기반 3회차: 생성자, this, Order  (0) 2026.01.21
자바 개념 확장  (0) 2026.01.15
객체지향 특징  (0) 2026.01.14
객체지향 이해하기  (0) 2026.01.09