# Spring ์ž…๋ฌธ / 3. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
Study Repository

Spring ์ž…๋ฌธ / 3. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ

by rlaehddnd0422

1.  ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ

๋ฐ์ดํ„ฐ : ID, name

๊ธฐ๋Šฅ : ๋“ฑ๋ก ๋ฐ ์กฐํšŒ

์ „์ œ : DB๋Š” ์„ค์ •๋˜์ง€ ์•Š์Œ.

 

- ์ผ๋ฐ˜์  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ

 

1. ์ปจํŠธ๋กค๋Ÿฌ : ์›น MVC์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• 

2. ์„œ๋น„์Šค : ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„

3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ : DB์— ์ ‘๊ทผ, ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ DB์— ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ

4. ๋„๋ฉ”์ธ : ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๊ฐ์ฒด

ex) ํšŒ์›, ์ฃผ๋ฌธ, ์ฟ ํฐ ๋“ฑ๋“ฑ ์ฃผ๋กœ DB์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ๋จ.

 

 

 

- ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„

 

- DB๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์€ ์ƒํ™ฉ์ด๋ผ ์šฐ์„  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ• ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„

- ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ(DB)๋Š” RDB, NoSQL ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์ €์žฅ์†Œ๊ฐ€ ์žˆ์ง€๋งŒ ๊ณ ๋ฏผ์ค‘์ธ ์ƒํ™ฉ

- ๊ฐœ๋ฐœ์ง„ํ–‰์„ ์œ„ํ•ด์„œ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ๊ตฌํ˜„์ฒด๋กœ ๊ฐ€๋ฒผ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์‚ฌ์šฉ

 

2. ํšŒ์› ๋„๋ฉ”์ธ๊ณผ Repository ์ƒ์„ฑ

- ํšŒ์› ๊ฐ์ฒด(๋„๋ฉ”์ธ) ์ƒ์„ฑ

package kdo6301.spring0.domain;

public class Member {

    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

}

- ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค

 

์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ save ๋ฉ”์†Œ๋“œ, ๊ฒ€์ƒ‰์„ ์œ„ํ•œ findBy ๋ฉ”์†Œ๋“œ ์„ ์–ธ

package kdo6301.spring0.repository;

import kdo6301.spring0.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {

    Member save(Member member);

    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();
}

โ—๏ธ Optional์ด๋ž€?

๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ค‘ ํ•˜๋‚˜์ธ Null Pointer Exception ( NPE ) ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•

Optional <T> ๋Š” null๊ฐ’์ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๊ฐ์‹ธ๋Š” Wrapper ํด๋ž˜์Šค๋กœ , null์ด ๋ฐœ์ƒ ํ•˜๋”๋ผ๋„ NPE๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋„์™€์ค€๋‹ค.

 

 

- ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด

 

package kdo6301.spring0.repository;

import kdo6301.spring0.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        member.setId((++sequence));
        store.put(member.getId(),member);
        return member;
    }
	
    @Override
    public Optional<Member> findById(Long id) {
    	// store์— ํ•ด๋‹นํ•˜๋Š” id๊ฐ’์ด ์—†์œผ๋ฉด ๋นˆ ๊ฐ์ฒด ๋ฆฌํ„ด
        // ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ๊ฐ์ฒด ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌํ„ด 
    	return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }
    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }
    
    public void clearStore()
    {
        store.clear();
    }
}

- Map Collection

/ key, value๋ฅผ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ์š”์†Œ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ปฌ๋ ‰์…˜

/ key๋ฅผ ํ†ตํ•ด value๋ฅผ ์–ป์–ด๋‚ธ๋‹ค.

/ ์‚ฝ์ž… : get() ๋ฉ”์†Œ๋“œ

/ ๊ฒ€์ƒ‰ : put() ๋ฉ”์†Œ๋“œ

 

- ArrayList Collection

/ C++์˜ vector์™€ ๊ฐ™์ด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์œผ๋กœ ๋ณ€ํ•จ

 

 

- HashMap Collection

/ Map Collection class์— ์†ํ•˜๋Š” ํด๋ž˜์Šค 

/ HashMap์€ Map์„ ๊ตฌํ˜„ํ•œ๋‹ค. key์™€ value๋ฅผ ๋ฌถ์–ด ํ•˜๋‚˜์˜ entry๋กœ ์ €์žฅํ•œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง

/ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ key์™€ value์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ์š”์†Œ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ปฌ๋ ‰์…˜

/ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ value๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ key๋ฅผ ์ด์šฉ

/ ์‚ฝ์ž… : get() ๋ฉ”์†Œ๋“œ

/ ๊ฒ€์ƒ‰ : put() ๋ฉ”์†Œ๋“œ

/ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(hash algorithm)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

 

 

- ofNullable() method

of()๋‚˜ ofNullable() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Optional ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

of() ๋ฉ”์†Œ๋“œ๋Š” null์ด ์•„๋‹Œ ๋ช…์‹œ๋œ ๊ฐ’์„ ์ง€๋‹ˆ๋Š” Optional ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด

-> of() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด์— null์ด ์ €์žฅ๋˜๋ฉด NPE ๋ฐœ์ƒ

ofNullable() ๋ฉ”์†Œ๋“œ๋Š” ๋ช…์‹œ๋œ ๊ฐ’์ด null์ด ์•„๋‹ˆ๋ฉด ๋ช…์‹œ๋œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” Optional ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด,

๋ช…์‹œ๋œ ๊ฐ’์ด null์ด๋ฉด ๋น„์–ด์žˆ๋Š” Optional ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด

 

- stream / filter 

stream์€ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ฐธ์กฐํ•˜์—ฌ ๋žŒ๋‹ค์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” iterator

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๊ณ , inner iterator๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค๊ณ  ํ•œ๋‹ค.

 

3. ํšŒ์› Repository Test Case ์ž‘์„ฑ

๊ฐœ๋ฐœํ•œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ด์„œ ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ์ž๋ฐ”์˜ main ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๊ธฐ์—๋Š” ์‹คํ–‰ํ•˜๋Š” ๋ฐ

์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

์ž๋ฐ”๋Š” JUnit์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•œ๋‹ค.

 

- ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด ํ…Œ์ŠคํŠธ

import kdo6301.spring0.domain.Member;
import kdo6301.spring0.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.assertj.core.api.Assertions;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

public class MemoryMemberRepositoryTest {
    MemoryMemberRepository repository = new MemoryMemberRepository();

    @AfterEach
    public void afterEach()
    {
        repository.clearStore();
    }

    @Test
    public void save()
    {
        //given
        Member member = new Member();
        member.setName("spring1");
        //when

        repository.save(member);

        //then
        Member result = repository.findById(member.getId()).get();
        assertThat(result).isEqualTo(member);
    }

    @Test
    public void findByName() {
        // given
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        //when
        Member result = repository.findByName("spring1").get();

        //then
        assertThat(result).isEqualTo(member1);
    }

    @Test
    public void findAll() {
        //given
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);
        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        //when
        List<Member> result = repository.findAll();

        //then
        assertThat(result.size()).isEqualTo(2);
    }


}

 

โ—๏ธ @AfterEach 

: ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ•ด์•Ÿ๋ฉด ๋ฉ”๋ชจ๋ฆฌ DB์— ์ง์ „ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‚จ๊ฒŒ ๋˜๋ฉด ์ด์ „ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‹ค์Œ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์–ด์„œ ์‹คํŒจํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

AfterEach ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๋งˆ๋‹ค ์ด ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ, ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด store๋ฅผ ๋น„์šฐ๋„๋ก ์„ค์ •ํ•ด ์ฃผ์—ˆ๋‹ค.

 

โ—๏ธโ—๏ธ ํ…Œ์ŠคํŠธ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ํ…Œ์ŠคํŠธ๋Š” ์ข‹์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹˜.

 

4.  ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ

 

package kdo6301.spring0.service;

import kdo6301.spring0.domain.Member;
import kdo6301.spring0.repository.MemberRepository;
import kdo6301.spring0.repository.MemoryMemberRepository;

import java.util.List;
import java.util.Optional;

public class MemberService {
	
    
    /*
    private final MemoryMemberRepository memberRepository = new MemoryMemberRepository();
    ๋กœ ์ž‘์„ฑํ•˜๋ฉด 
    
    ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
    
    private final MemberRepository memberRepository = new MemoryMemberRepository();
	
    ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ์— MemberRepository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
   
 
    */
    
    
    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /*
    ํšŒ์›๊ฐ€์ž…
     */
    public Long join(Member member)
    {
        validateDuplicateMember(member); // ์ค‘๋ณตํšŒ์› ๊ฒ€์ฆ
        memberRepository.save(member);
        return member.getId();
    }

    private void validateDuplicateMember(Member member)
    {
        memberRepository.findByName(member.getName())
                .ifPresent(m->{
                    throw new IllegalStateException("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.");
                });
    }

    /*
    ์ „์ฒด ํšŒ์› ์กฐํšŒ
     */

    public List<Member> findMembers()
    {
        return memberRepository.findAll();
    }

    public Optional<Member> findOne(Long memberId)
    {
        return memberRepository.findById(memberId);
    }
}

 

 

5.  ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ

๊ธฐ์กด์—๋Š” ํšŒ์› ์„œ๋น„์Šค ( MemberService ) ๊ฐ€ MemoryMemberRepository๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฒŒ ํ•ด์ฃผ์—ˆ๋‹ค.

public class MemberService {
      private final MemberRepository memberRepository =
                                            new MemoryMemberRepository();
}

*ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ฝ”๋“œ๊ฐ€

ํšŒ์› ์„œ๋น„์Šค ์ฝ”๋“œ๋ฅผ DI ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค.

public class MemberService {
      private final MemberRepository memberRepository;
      public MemberService(MemberRepository memberRepository) {
          this.memberRepository = memberRepository;
}
... }

}

 

package kdo6301.spring0.service;

import kdo6301.spring0.domain.Member;
import kdo6301.spring0.repository.MemberRepository;
import kdo6301.spring0.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;

class MemberServiceTest {

    MemberService memberService;
    MemoryMemberRepository memberRepository;

    @BeforeEach
    public void beforeEach()
    {
        memberRepository = new MemoryMemberRepository();
        memberService = new MemberService(memberRepository);

    }

    @AfterEach
    public void afterEach()
    {
        memberRepository.clearStore();
    }

    @Test
    void join() {
        //given
        Member member = new Member();
        member.setName("Kim");
        //when
        Long saveId = memberService.join(member);

        //then
        Member One = memberService.findOne(saveId).get();
        Assertions.assertThat(member.getName()).isEqualTo(One.getName());
    }

    @Test
    void ์ค‘๋ณตํšŒ์›์˜ˆ์™ธ()
    {
        // given
        Member mem1 = new Member();
        mem1.setName("Spring1");

        Member mem2 = new Member();
        mem2.setName("Spring1");

        // when

        memberService.join(mem1);
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(mem2));
        Assertions.assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.");

//        try
//        {
//            memberService.join(mem2);
//            fail();
//        }catch(IllegalStateException e){
//            Assertions.assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.");
//        }


        // then
    }
 
}

โ—๏ธ@BeforeEach : ๊ฐ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ „์— ํ˜ธ์ถœ๋œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์„œ๋กœ ์˜ํ–ฅ์ด ์—†๋„๋ก ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด๊ด€๊ณ„๋„ ์ƒˆ๋กœ ๋งบ์–ด์ค€๋‹ค.

-> @AfterEach ์•ˆ์จ์ฃผ์–ด๋„ ๋จ.

 

 

<์ฐธ๊ณ  ์ž๋ฃŒ>

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[๋ฌด๋ฃŒ] ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ „๋ฐ˜์„ ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

 

https://mangkyu.tistory.com/70

 

[Java] Optional์ด๋ž€? Optional ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• - (1/2)

์ด๋ฒˆ์—๋Š” Java8๋ถ€ํ„ฐ ์ง€์›ํ•˜๋Š” Optional ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. Optional์ด๋ž€? Optional ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• [ NPE(NullPointerException) ์ด๋ž€? ] ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”

mangkyu.tistory.com

https://mkil.tistory.com/122

 

[์ž๋ฐ” ๊ธฐ๋ณธ ๊ฐœ๋…] ์ปฌ๋ ‰์…˜(Collection) - HashMap / ์˜ˆ์ œ

1.4 HashMap-ํ‚ค(key)์™€ ๊ฐ’(value)์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ์š”์†Œ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ปฌ๋ ‰์…˜-๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ํ‚ค ์ด์šฉ-์š”์†Œ ์‚ฝ์ž… : get() ๋ฉ”์†Œ๋“œ-์š”์†Œ ๊ฒ€์ƒ‰ : put() ๋ฉ”์†Œ๋“œ public class _04HashMapDicEx { public static vo

mkil.tistory.com

https://devlogofchris.tistory.com/41

 

[JAVA]Map์ด๋ž€? (HashMap, Hashtable, TreeMap)

Map ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค Map ์ธํ„ฐํŽ˜์ด์Šค๋Š” Collection ์ธํ„ฐํŽ˜์ด์Šค์™€๋Š” ๋‹ค๋ฅธ ์ €์žฅ ๋ฐฉ์‹์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ Map ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋“ค์€ ํ‚ค์™€ ๊ฐ’์„ ํ•˜๋‚˜์˜ ์Œ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹(key-value ๋ฐฉ์‹)์„

devlogofchris.tistory.com

https://psychoria.tistory.com/765

 

[Java] ์ž๋ฐ” ArrayList ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

ArrayList๋Š” ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ArrayList๋Š” ์ž๋ฐ”์˜ List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฐฐ์—ด๊ณผ ๋™์ผํ•˜๊ฒŒ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์ธ

psychoria.tistory.com

 

 

[Java] ์ŠคํŠธ๋ฆผ(Stream) ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• / filter, map / iterator ๋น„๊ต

[Java] Stream - ์ž๋ฐ” ์ŠคํŠธ๋ฆผ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• ๐Ÿ’ก ์ž๋ฐ” ์ŠคํŠธ๋ฆผ (Stream ) ์ž๋ฐ”์˜ ์ŠคํŠธ๋ฆผ(Stream)์€ Java 8์— ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์ด๋‹ค. ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ฐธ์กฐํ•˜์—ฌ ๋žŒ๋‹ค์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„

devmoony.tistory.com

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ