1. Member Class
//Member class ๋ง๋ค๊ธฐ
package hello.hellospring.domain;
public class Member
{
private Long id;
private String name;
public Long getId() //ID ์กฐํ
{
return id;
}
public void setId(Long id) //id ์ค์ (์ธ์๋ก ๋ค์ด์จ ์ค์๊ฐ ํด๋น ๊ฐ์ฒด์ id)
{
this.id = id;
}
public String getName() //Name ์กฐํ
{
return name;
}
public String setName(String name) //Name ์ค์ (์ธ์๋ก ๋ค์ด์จ String์ด ํด๋น ๊ฐ์ฒด์ name )
{
this.name = name;
}
}
// long์ ๋ถํธ ์๋ ์ ์
// string name์ ํด๋ผ์ด์ธํธ๊ฐ ์น๋ ๊ฑฐ
// long id๋ ํด๋ผ์ด์ธํธ๊ฐ ์น๋ ๊ฑฐ ์๋ -> ์๋ ์์ฑ
//ํด๋น ๋ฉค๋ฒ ํด๋์ค๋ ์ด๋ฆ๊ณผ id ์กฐํํ๋ ํจ์๋, ํด๋น ๊ฐ์ฒด์ id๋ฅผ ์ค์ ํ๋ ํจ์๋ก ๋์ด ์๋ค.
2. interface ๋ง๋ค๊ธฐ
//repository์์ ์ฌ์ฉํ๋ ๋ฉ์๋๋ค์ ๋ํ ๊ฐ์ด๋ ๋ผ์ธ
package hello.hellospring.repository;
import hello.hellospring.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();
}
//์ถ์๋ฉ์๋ - ๊ฐ ๊ธฐ๋ฅ์ ๋ํ ๊ฐ์ด๋๋ผ์ธ๋ง ์ง๋์๋ค.
(1)์ธํฐํ์ด์ค๋?
๋ป - ๊ทน๋จ์ ์ผ๋ก ๋์ผํ ๋ชฉ์ ํ์ ๋์ผํ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํ ๊ฐ์ด๋
HOW?
- ์ธํฐํ์ด์ค๋ผ๋ ํ๋์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ๊ทธ ๊ณณ์ ๊ฐ์ ๋ก ์จ์ผํ ๊ฐ์ด๋ ๋ฉ์๋๋ฅผ ์ ๊ณต.
- ๋ฉ์๋๋ ์์ ๋ฐ๋ ํด๋์ค๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ(์ฌ์ ์)ํด์ ์จ๋ ๋๋ ์ถ์ ๋ฉ์๋๊ฐ ์๊ณ ,
์ธํฐํ์ด์ค๊ฐ ์ ๊ณตํ๋ ๊ฒ์ ๋ฌด์กฐ๊ฑด ์ฌ์ฉํด์ผํ๋ ์ ์ ๋ฉ์๋๊ฐ ์๋ค.
public interface ์ธํฐํ์ด์ค๋ช {
//์์ -> ์ธํฐํ์ด์ค์์ ๊ฐ์ ์ ํด์คํ ๋ ๋ฐ๊พธ์ง๋ง๊ณ ์ ๊ณตํ๋ ๊ฐ๋ง ์ฐธ์กฐํ๋ผ
ํ์ ์์๋ช = ๊ฐ;
//์ถ์ ๋ฉ์๋ -> ๊ฐ์ด๋๋ง ์คํ ๋ ์ถ์๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ฌ๊ตฌํ ํ๋ผ
ํ์ ๋ฉ์๋๋ช (๋งค๊ฐ๋ณ์, ... );
//๋ํดํธ ๋ฉ์๋ -> ์ธํฐํ์ด์ค์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๋ง์ ์๋ค๋ฉด ๊ฐ์ ๊ตฌํํด๋ผ
default ํ์ ๋ฉ์๋๋ช (๋งค๊ฐ๋ณ์, ... ){
//๊ตฌํ๋ถ
}
//์ ์ ๋ฉ์๋ -> ์ธํฐํ์ด์ค๊ฐ ์ ๊ณตํด์ฃผ๋ ๊ฒ ๋ฌด์กฐ๊ฑด ์ฌ์ฉํด๋ผ
static ํ์ ๋ฉ์๋๋ช (๋งค๊ฐ๋ณ์) {
//๊ตฌํ๋ถ
}
}
(2) Optional<T>
java์์ ๊ฐ์ด NULL์ด ์ค๋ฉด NPE(NullpointerException)์ด๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ, Optional์ ์ฐ๊ณ <>๋ก NULL์ด ์ฌ ์ ์๋ ๊ฐ์ ๊ฐ์ธ๋ฉด, ํด๋น ๊ฐ์ด NULL์ด๋๋ผ๋ NPE๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํด์ค๋ค.
Optional<Member> findbyId(Long id); // Member type์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๋ optional type์ ํจ์
3.Interface๋ฅผ ์ฌ์ฉํด Repository ๊ตฌํ
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.*;
public class MemoryMemberRepository implements MemberRepository
{
private static Map<Long, Member> store = new HashMap<>();
//๊ตฌ์กฐ - Map<key,value>๋งต์ ์ด๋ฆ key-value ์์ผ๋ก 2*n์ ํ๋ก ์ ์ฅ๋จ.
private static long sequence = 0L;
//sequence๋ ํด๋ผ์ด์ธํธ์ id๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ
@Override // member ํ์
์ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋, ์์ฐจ๋ณ๋ก id ์๋ ์์ฑ ์ ์ฅ, Name์ ์
๋ ฅ ๊ฐ ๋ถ๋ฌ๋ค์.
public Member save(Member member) { //java ๋งค์๋์ ๊ตฌ์กฐ public ๋ฐํ์๋ฃํ ๋งค์๋์ด๋ฆ(์ธ์1,์ธ์2...)
member.setId(++sequence); // id๋ ์์ฐจ์์ ์ ์ ์์. id๋ฅผ index์ฒ๋ผ ์.
store.put(member.getId(),member);// map์ ๋ญ ๋ฃ์ ๋ put ์. get์ ์กฐํ! id == key, member==value
return member;
}
@Override
public Optional<Member> findbyId(Long id) {
return Optional.ofNullable(store.get(id)); //null์ธ์ง ์๋์ง ํ์ ํ ์ ์๋ ๊ฐ์ ๋ด๊ณ ์์์ ๋ปํจ.
} // ํด๋น ๋งค์๋๋ ๋ฐํ ์๋ฃํ์ Optional๋ก ๊ฐ์๋๋ฐ ์ด๋ ํด๋น ๊ฐ์ด null์ด ๋๋ ์๋ฌ ์ ๋จ๋๋ก ์กฐ์นํ ๊ฒ.
@Override
public Optional<Member> findbyName(String name) {
return store.values().stream() // stream์ ๋ฐ์ ์ค๋ช
.filter(member -> member.getName().equals(name))
.findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
}
(1)Map ์ด๋?
๋ฆฌ์คํธ๋ ๋ฐฐ์ด์ฒ๋ผ ์์ฐจ์ ์ผ๋ก ํด๋น ์์์ ๊ฐ์ ์ฐพ์ง ์๊ณ , Key ๊ฐ์ ์ด์ฉํด ๊ทธ์ ํด๋นํ๋ value๋ฅผ ์ป๋ ์๋ฃํ
map<key,value>map์ ์ด๋ฆ = new Hashmap<>();
์์) map.put์ ํด๋น ๋งต์ ํค์ value๊ฐ์ ์ง์ด๋ฃ๋ ๊ฒ์. key๋ ์ค๋ณต ๋ถ๊ฐ, value๋ ์ค๋ณต ํ์ฉ.
HashMap<String, String> map = new HashMap<String, String>();
map.put("people", "์ฌ๋");
map.put("baseball", "์ผ๊ตฌ");
(2) stream
์ปฌ๋ ์ ์ ์ ์ฅ๋์ด ์๋ ์๋ฆฌ๋จผํธ๋ค์ ์ํํ๋ฉด์ ํน์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฌธ์ฅ
๋๋ค์๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ์ปฌ๋ ์ ์ ๋ค์ด์ด์ด ๋ฐ์ดํฐ๋ค์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋งค์ฐ ๊ฐ๊ฒฐํ๊ฒ ํํ ๊ฐ๋ฅ
store.values().stream() // map ์๋ฃํ์ธ store์ value๋ฅผ ์ํํ๊ฒ ๋ค.
.filter(member -> member.getName().equals(name)) // ์
๋ ฅ ๋ฐ์ name๊ณผ ๊ฐ์ ์ด๋ฆ์ ๋ฉค๋ฒ ๋ฝ์๋.
.findAny(); // ์กฐ๊ฑด์ ์ผ์นํ๋ ์์ 1๊ฐ๋ฅผ ๋ฐํํจ.
(3)๋๋ค์
์๋ณ์ ์์ด ์คํ ๊ฐ๋ฅํ ํจ์
(์๋ณ์ = ์ด๋ค ๋์์ ์ ์ผํ๊ฒ ์๋ณ ๋ฐ ๊ตฌ๋ณํ ์ ์๋ ์ด๋ฆ)
(๋งค๊ฐ๋ณ์,...) -> {์คํ๋ฌธ}
๋ป: ํด๋น ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๊ณ {}์์ ๋ฌธ์ฅ์ ์คํํ๋ผ.
(๋งค๊ฐ๋ณ์ = {}๋ธ๋ก์ ์คํํ๊ธฐ ์ํด์ ํ์ํ ๊ฐ)