
이 글은 2026년 04월 07일 작성된 글입니다.
오늘은 자바 객체지향 개념(추상 클래스, 다형성, 생성자)과 Stream API
기초를 간단히 정리했다.
전사가 사용하는 무기에 따라 공격 방식이 달라지도록 구현한다.
class 전사 {
String 이름;
int 나이;
무기 a무기;
void 공격() {
a무기.작동(이름, 나이);
}
}
abstract class 무기 {
String 무기명;
void 작동(String 이름, int 나이) {
System.out.println(나이 + "살 전사 " + 이름 + "(이)가 " + 무기명 + "(으)로 공격합니다.");
}
}
class 칼 extends 무기 {
칼() { 무기명 = "칼"; }
}
class 활 extends 무기 {
활() { 무기명 = "활"; }
}
핵심
abstract class : 직접 객체 생성 불가메서드는 return을 통해 값을 반환한다.
static int get정수() {
return 5;
}
특징
null도 반환 가능객체 생성 시 자동 실행되는 메서드.
class 사람 {
String 이름;
int 나이;
사람() {
이름 = "홍길동";
나이 = 22;
}
사람(String 이름, int 나이) {
this.이름 = 이름;
this.나이 = 나이;
}
}
특징
객체 생성 시 부모 생성자 → 자식 생성자 순서로 실행된다.
class 동물 {
동물() {
System.out.println("동물 생성");
}
}
class 사람 extends 동물 {
사람() {
super();
System.out.println("사람 생성");
}
}
같은 클래스의 다른 생성자를 호출할 때 사용한다.
class 전사 {
String 이름;
int 나이;
전사() {
this("NoName");
}
전사(String 이름) {
this.이름 = 이름;
나이 = 20;
}
}
컬렉션 데이터를 간결하게 처리하는 기능.
IntStream.rangeClosed(1, 10)
.forEach(System.out::println);
IntStream.rangeClosed(1, 10)
.filter(e -> e % 2 != 0)
.forEach(System.out::println);
int[] result = Arrays.stream(numbers)
.map(e -> e * 2)
.toArray();
특징
this()와 super()로 생성자 흐름을 제어할 수 있다.