1. 학습 내용
14:00 ~ 15:00 키오스크 과제 해설 ( 박성규 튜터님 )
16:00 ~ 17:40 자바 미니세션 ( 클래스, 객체 / 박성원 튜터님 )
[키오스크 과제 해설]
내 코드와 비교하면서, 대부분 사람마다 개개인의 취향에 따라서 코드를 작성 했던 것이 눈에 들어왔고, 누구는 클래스를 더 만들어서 구현하고 누구는 한 클래스에 많은 코드량을 통해 관리해서 구현을 한 사람이 있어서 정답은 없는것 같았다.
오늘은 과제 제출일 이라서 복습하는 시간을 가졌다. 특히 가장 부족했던 스트림에 대해서 복습하는 시간을 가졌다.
stream() - 스트림화 할려할때 제일 처음에 나오는 메소드
.collect(Collectors.{어떤 방식으로 반환할것인지}) - 최종으로 List, Set, Map 반환 ( 최종 연산 )
List<String> names = Arrays.asList("이민혁","홍길동","김철수","강호동","유재석","차은우","김이나", "이호민","유재석");
//list 복사
List<String> sortingNames = names.stream().collect(Collectors.toList());
filter() - 각 요소 중에 조건식을 통해 참인 경우만 반환하게 한다. ( 중간 연산 )
.contains(값) - 해당 값이 포함되어 있는가.
.forEach() - for 향상문 으로 주어진 동작을 수행 ( 최종 연산 )
.startsWith(값) - 값 기준으로 시작이 되는가.
//Stream 검색
names.stream()
.filter(name -> name.contains("김"))
.forEach(x -> System.out.println("김이" + " 포함된 이름 : " + x));
// 김이 포함된 이름 : 김철수
// 김이 포함된 이름 : 김이나
//Stream filter 여러개
names.stream()
.filter(x -> x.startsWith("이"))
.filter(x -> x.contains("민"))
.forEach(x-> System.out.println("이로 시작하며, 민 글자가 포함된 이름 : "+x));
// 이로 시작하며, 민 글자가 포함된 이름 : 이민혁
// 이로 시작하며, 민 글자가 포함된 이름 : 이호민
count() - 해당 스트림화 된 요소들의 개수를 셈 ( 최종 연산 )
//count 확인
long count = 0;
count = names.stream().count();
System.out.println("Count : " + count); // Count : 9
limit(값) - 요소를 해당값 까지만 제한을 두는 조건. ( 중간 연산 )
//개수 정하기
names.stream()
.limit(5)
.forEach(x -> System.out.println("limit5 : "+x));
// limit5 : 이민혁
// limit5 : 홍길동
// limit5 : 김철수
// limit5 : 강호동
// limit5 : 유재석
sorted() - 요소들을 정렬 해줌. ( 중간 연산 )
Comparator 객체를 통해서 역순으로 정렬도 가능함.
//정렬
names.stream()
.sorted()
.forEach(x -> System.out.println("정렬 : "+x));
// 정렬 : 강호동
// 정렬 : 김이나
// 정렬 : 김철수
// 정렬 : 유재석
// 정렬 : 이민혁
// 정렬 : 이호민
// 정렬 : 차은우
// 정렬 : 홍길동
names.stream()
.sorted(Comparator.reverseOrder())
.forEach(x -> System.out.println("역순 정렬 : "+x));
// 역순 정렬 : 홍길동
// 역순 정렬 : 차은우
// 역순 정렬 : 이호민
// 역순 정렬 : 이민혁
// 역순 정렬 : 유재석
// 역순 정렬 : 김철수
// 역순 정렬 : 김이나
// 역순 정렬 : 강호동
distinct() - 요소 중복을 제거함
//중복 제거
names.stream()
.distinct()
.forEach(x -> System.out.println("중복제거 : "+x));
// 중복제거 : 이민혁
// 중복제거 : 홍길동
// 중복제거 : 김철수
// 중복제거 : 강호동
// 중복제거 : 유재석
// 중복제거 : 차은우
// 중복제거 : 김이나
// 중복제거 : 이호민
// names.stream()
// .distinct()
// .forEach(System.out::println); // 단 x 같은 매개변수를 쓰지못함
min() - 최소
max() - 최대
Comparator 객체를 통해서 .nartualOrder() 은 오름차순, reverseOrder() 은 내림차순 이다.
//최대, 최소값 구하기
names.stream()
.min(Comparator.naturalOrder())
.ifPresent(x-> System.out.println("최소값 : "+x));
names.stream()
.max(Comparator.naturalOrder())
.ifPresent(x-> System.out.println("최대값 : "+x));
{ 자바 미니 세션 (클래스, 객체) } - 포켓몬 클래스


public class Pokemon {
private String name;
private String type;
private int hp;
private int attack;
private int defense;
public Pokemon(String name, String type, int hp, int attack, int defense) {
this.name = name;
this.type = type;
this.hp = hp;
this.attack = attack;
this.defense = defense;
}
public void attack(Pokemon targetPokemon) {
System.out.println(this.name + "가 " + targetPokemon.name + "를 공격합니다!");
targetPokemon.takeDamage(this.attack);
}
public void takeDamage(Integer amount) {
this.hp -= amount;
if (this.hp <= 0) {
System.out.println(this.name + "가(이) 쓰러졌습니다.");
hp = 0;
} else {
System.out.println(this.name + "의 남은 체력은 " + this.hp + "입니다.");
}
}
public void printinfo() {
System.out.println(this.name + " | 타입: " + this.type + " | 체력: " + this.hp
+ " | 공격력: " + this.attack + " | 방어력: " + this.defense);
}
public String getName() {
return name;
}
public String getType() {
return type;
}
public int getHp() {
return hp;
}
public int getDefense() {
return defense;
}
public int getAttack() {
return attack;
}
}
Pokemon 클래스
package class수업박성원튜터님;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Pokemon pikachu = new ElectircPokemon("피카츄", "전기", 100, 20, 10);
Pokemon pairi = new FirePokemon("파이리", "불꽃", 90, 25, 8);
Pokemon ggobugi = new WaterPokemon("꼬부기", "물", 110, 18, 12);
List<Pokemon> pokemonList = new ArrayList<>();
List<Pokemon> pokemonBattleList = new ArrayList<>();
pokemonList.add(pikachu);
pokemonList.add(pairi);
pokemonList.add(ggobugi);
// 포켓몬 정보 출력!!
for(Pokemon pokemon : pokemonList) {
pokemon.printinfo();
}
System.out.println("\n==== 배틀 시작! ====\n");
pokemonBattleList.add(pikachu);
pokemonBattleList.add(pairi);
while (true) {
// pairi가 pikachu를 공격
pairi.attack(pikachu);
if (pikachu.getHp() <= 0) {
break;
}
// pikachu가 pairi를 공격
pikachu.attack(pairi);
if (pairi.getHp() <= 0) {
break;
}
}
System.out.println("\n==== 배틀 결과 ====\n");
for(int i=0; i<pokemonBattleList.size(); i++) {
pokemonBattleList.get(i).printinfo();
}
System.out.println("\n==================\n");
}
}
main 클래스
3단계 까지 필수적인 기능들은 완벽히 구현하였다.
중간에 포켓몬이 쓰러졌음에 도 불구하고 데미지를 입혔다고 떠서 버그를 수정하는데에 시간이좀 걸렸지만 해결했다.

마지막 인 4단계는 시간 부족으로 구현하지 못하였다. 다소 일정확률 같은 경우는 Math.random() * 100 을 이용해서 확률적인 기능을 이용하면 되지만, 종류별로 다 기능이 다르기 때문에 특수효과를 나타내는것이 까다로웠다.
2. 내일 학습 할것 : 주말동안 CS지식 정리 포스팅 (자료구조 or 네트워크) , Spring 대비 예습 (RestAPI, 통신규약, HTTP란? )
'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글
| TIL 21 [ Spring( 어노테이션, lombok, 프레임워크, 빌드 도구, 웹 기술 역사 + 스탠다드반 (Spring MVC) ] (0) | 2025.03.18 |
|---|---|
| TIL 20 [ Spring( 네트워크, 용어, HTTP, Rest API ) ] (0) | 2025.03.17 |
| TIL 18 [ 키오스크 과제 (도전🔥 2단계) + Java ( 컬렉션, 스트림 ) ] (0) | 2025.03.13 |
| TIL 17 [ 키오스크 과제 (도전🔥 1단계) + Intellij 깃 사용법 ] (0) | 2025.03.12 |
| TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ] (0) | 2025.03.11 |