spring 맛보기

가언·2024년 7월 8일
import java.util.HashMap;
import java.util.Map;

public class DAO { //=> Repository

    Map<Integer, String> db=new HashMap<>();
   // HashMap<Integer, String> db=new HashMap<>();
    //제네릭: <> 안에 넣고 싶은거 다 넣어도 돼, 객체/타입면 다 됨~ data를 명시하지 않았어
    //객체만 받아줌-> int가 들어가지 못하기 때문에 쓰기 편하게 한겹 싸서 integer를 생성, refer class를 등장시킴
}


class UserService{
	// public 포기->  한 파일내에 두개 이상의 클래스 생성 가능, 각각 build해서 만들어짐
}

DAO vs DTO?

V - C - M

  • Model
    • 데이터: DAO (member, user)
    • 로직/연산 : 서비스

예시) 회원가입 서비스

사전 설계: 지금은 굳이..? 인데 추후 추가(수정, 확장) 될 것을 감안하여 설계를 넓게 하는 것 => 다시 좁힘="리팩토링의 완성판"

Main 클래스

//Main
public class Main {
    public static void main(String[] args) {

        //아래 코드를 실행했을 때, "00님 가입을 환영합니다."
        UserService userService=new UserService();

        User gari=new User("gari" );
        userService.join(gari);
    }
}

UserDAO 클래스

//UserDAO
import java.util.HashMap;
import java.util.Map;

public class UserDAO { //=> Repository
    Map<Integer, User> db=new HashMap<>();
    public void createUser(User user){
        db.put(user.id, user);
        System.out.println(db);
        System.out.println(user.getName()+"님 가입을 축하합니다.");
    }
}

UserService 클래스

//UserService
public class UserService { //사용자의 시선
	UserDAO userDAO= new UserDAO(); //데이터의 시선 
    public void join(User user){
        
        //문제점 회원가입할 때마다 db가 새로 생성됨, 의존성이 높음 -> 생성자에 넣는 방법, 빌드를 전역으로 선언
        userDAO.createUser(user);

    }
}

User 클래스
User을 따로 둔 이유? 사전 설계 나중을 대비해서 미리 확장한 것 여러가지 데이터를 받을 것이기 때문..!

//User
public class User {
    private static int idCounter = 0;  // static 변수로 ID 카운터를 유지
    public int id;
    private String name;

    public User(String name) {
        this.id = ++idCounter;  // 새로운 유저가 생성될 때마다 idCounter 증가
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

회원 서비스 프로젝트

모든 입력은 스캐너(콘솔 입력) 클래스를 이용합니다.

  • 필수 회원 정보는 id, pw, 이름입니다. (여유가 있다면 유효성 검사를 추가하셔도 됩니다.)
  • DB를 대체할 클래스 DAO(스프링에서 Repository)는 별도로 구현합니다.
    class DAO는 필드로 Map을 선언하여, DB 대체로 활용합니다.
    (=DB의 기능은 Map의 메소드가 대체)

[작동 예시]
1. 메뉴를 사용자에게 입력 받습니다.
1: 회원가입 / 2: 로그인 / 3: 회원정보 수정 / 4: 탈퇴 / 0: 종료
입력: 1
2. 가입하실 아이디와 비밀번호를 (띄어쓰기로 구분하여) 입력하세요.
입력: songa 123
3. songa님 가입을 환영합니다.
1: 회원가입 / 2: 로그인 / 3: 회원정보 수정 / 4: 탈퇴 / 0: 종료
입력: 3
4. 로그인 상태가 아닙니다.

profile
@gari_guri

0개의 댓글