
이 글은 2026년 04월 08일 작성된 글입니다.
오늘은 프로그래머스 자바 입문 문제를 풀면서
클래스, 생성자, 접근제어자 등 객체지향 개념을 복습했다.
또한 Stream API를 활용하여 반복문과의 차이를 비교하며 구현해봤다.
클래스는 객체를 만들기 위한 설계도이고
객체는 클래스를 기반으로 생성된 인스턴스이다.
class Person {
String name;
}
객체 생성 시 초기화를 담당하는 메서드이다.
public Person(int id, String name, int age, char gender) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
클래스의 접근 범위를 제어한다.
| 접근제어자 | 설명 |
|---|---|
| public | 어디서든 접근 가능 |
| protected | 같은 패키지 + 자식 클래스 |
| default | 같은 패키지 |
| private | 해당 클래스 내부 |
필드를 private으로 선언하고 getter/setter로 접근하는 방식이다.
private int age;
public int getAge() {
return age;
}
컬렉션 데이터를 선언형으로 처리하는 방식이다.
| 메서드 | 설명 |
|---|---|
| stream() | 컬렉션을 Stream으로 변환 |
| filter() | 조건에 맞는 데이터만 추출 |
| map() | 데이터 변환 |
| mapToInt() | int 타입으로 변환 |
| average() | 평균 계산 |
| sum() | 합계 계산 |
| findFirst() | 첫 번째 요소 반환 |
Stream에서 데이터 타입을 변환할 때 사용하는 메서드이다.
map() → 객체 타입 변환mapToInt() → int 타입으로 변환예시
int[] array = Arrays.stream(new String[]{"1번", "2번", "3번"})
.map(e -> e.substring(0, e.length() - 1))
.mapToInt(Integer::parseInt)
.toArray();
String[] messages = new String[]{"1번", "2번", "3번"};
int[] numbers = new int[messages.length];
for (int i = 0; i < messages.length; i++) {
String message = messages[i];
message = message.substring(0, message.length() - 1);
int number = Integer.parseInt(message);
if (number % 2 == 0) continue;
numbers[i] = number;
}
int[] array = Arrays.stream(new String[]{"1번", "2번", "3번"})
.map(e -> e.substring(0, e.length() - 1))
.mapToInt(Integer::parseInt)
.filter(number -> number % 2 != 0)
.toArray();
int sum = 0;
for (Person person : people) {
if (person.getGender() == 'M') {
sum += person.getAge();
}
}
int sum = people.stream()
.filter(e -> e.getGender() == 'M')
.mapToInt(e -> e.getAge())
.sum();
int sum = 0;
int count = 0;
for (Person person : people) {
if (person.getGender() == 'M') {
sum += person.getAge();
count++;
}
}
double avg = (double) sum / count;
double avg = people.stream()
.filter(e -> e.getGender() == 'M')
.mapToInt(e -> e.getAge())
.average()
.orElse(0);
List<String> names = new ArrayList<>();
for (Person person : people) {
if (person.getGender() == 'M') {
names.add(person.getName());
}
}
String result = String.join(", ", names);
String result = people.stream()
.filter(e -> e.getGender() == 'M')
.map(Person::getName)
.collect(Collectors.joining(", "));
Person found = null;
for (Person person : people) {
if (person.getId() == 2) {
found = person;
break;
}
}
Optional<Person> op = people.stream()
.filter(e -> e.getId() == 2)
.findFirst();
Person found = op.orElse(null);
기본형 배열(int[])은 바로 List로 변환할 수 없기 때문에
boxing 과정이 필요하다.
List<Integer> list = Arrays.stream(new int[]{10, 20, 30})
.boxed()
.toList();