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 |