TIL 19 [ Java (스트림) , 미니세션 (클래스,객체) + 키오스크 과제 해설 ]

2025. 3. 14. 21:56·[내일배움캠프-Sparta]/Spring 6기
반응형

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
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 21 [ Spring( 어노테이션, lombok, 프레임워크, 빌드 도구, 웹 기술 역사 + 스탠다드반 (Spring MVC) ]
  • TIL 20 [ Spring( 네트워크, 용어, HTTP, Rest API ) ]
  • TIL 18 [ 키오스크 과제 (도전🔥 2단계) + Java ( 컬렉션, 스트림 ) ]
  • TIL 17 [ 키오스크 과제 (도전🔥 1단계) + Intellij 깃 사용법 ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    CPU
    Testcode
    웹
    네트워크
    개발자
    트랜잭션
    컴퓨터구조
    SQLD
    Java
    docker
    Python
    세션
    web
    백엔드
    SQL
    메모리
    It
    cs
    Til
    KPT
    spring
    내일배움캠프
    network
    알고리즘
    OS
    db
    코딩테스트
    배포
    운영체제
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 19 [ Java (스트림) , 미니세션 (클래스,객체) + 키오스크 과제 해설 ]
상단으로

티스토리툴바