사자가 된 감자 2주차

2023. 4. 9. 19:11·LikeLion🦁
728x90

이번주는 Collection 프레임워크도 알아보고 객체지향에 대해서도 알아봤다.

 

SOLID

  • Single responsibility principle(단일 책임 원칙)
    • 한 클래스는 하나의 책임만 가져야 한다.
    • 하나의 역할을 한다.
    • 클래스가 변경되어야 하는 이유가 하나만 있어야 함을 의미합니다.
  • Open/closed principle(개방 폐쇄 원칙)
    • 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장을 위해 열려 있어야 하지만 변경을 위해서는 닫혀 있어야 한다.
    • 개방폐쇄 원칙 기능은 유지보수를 하는 과정이 쉽게 이루어져야한다.
    • 기존의 코드를 변경하지 않고 시스템에 새로운 기능을 추가할 수 있도록 해야 함을 의미합니다.
  • Liskov substitution principle(리스코프 치환 원칙)
    • “프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고하라.
    • 원칙은 수퍼클래스의 객체가 하위 클래스의 객체로 대체될 수 있어야 함을 의미합니다. 즉, 하위 클래스는 부모 클래스 대신 사용될 수 있어야 합니다.
    • 객체가 상속을 받을 때 하위, 상위 객체가 있다. 상위에서 동작하는 것이 하위에서도 동작 할 수 있게 만든다.
    • ex)List<Node> list = new ArrayList<>();
  • Interface segregation principle(인터페이스 분리 원칙)
    • 클라이언트가 사용하지 않는 메서드에 의존하지 않도록 해야 함을 의미합니다.
    • 인터페이스가 특정 기능에 집중된 작고 간결한 것이어야 함을 의미합니다.
    • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • Dependency inversion principle(의존관계 역전 원칙)
    • 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

 

이번주는 로그인 프로그램 만들기를 해보았당

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;


public class Main {
    static HashMap<String,Member> repository = new HashMap<>();
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    public static void main(String[] args) throws IOException {

        while (true){
            try {
                int order = start();
                switch (order){
                    case 1:
                        if(login()){
                            continue;
                        };
                        break;
                    case 2:
                        memberShip();
                        break;
                    case 3:
                        SystemOff();
                        break;
                    default:
                        System.out.println("번호를 다시 확인해주세요.");
                }
            }
            catch (NumberFormatException exception){
                System.out.println("번호로 입력해주세요.");
            }
        }
    }

    static public int start() throws IOException {

        StringBuilder sb = new StringBuilder();

        sb.append("멋쟁이사자처럼 로그인 프로그램\n")
                .append("\n")
                .append("==================\n")
                .append("1. 로그인\n")
                .append("2. 회원가입\n")
                .append("3. 종료\n")
                .append("==================\n")
                .append("어떤걸 진행하시겠습니까? :");

        System.out.print(sb);

        return Integer.parseInt(br.readLine());
    }
    static public boolean login() throws IOException {
        System.out.print("아이디를 입력하세요 : ");
        String id = br.readLine();
        System.out.print("비밀번호를 입력하세요 : ");
        String password = br.readLine();
        System.out.println();

        Member member = repository.get(id);//회원 정보 가져오기

        if(member!=null){
            if(id.equals(member.id) && password.equals(member.password)){
                System.out.println(id+" 회원 성공적으로 로그인하였습니다.");
                SystemOff();
            }
            else {
                System.out.println("비밀번호가 틀렸습니다.");
            }
        }
        else {
            System.out.println("없는 회원입니다.\n");
        }
        return false;
    }

    static public void memberShip() throws IOException {
        while (true){

            System.out.print("아이디를 입력하세요 : ");
            String id = br.readLine();

            if(repository.get(id)!=null){
                System.out.println("이미 있는 아이디입니다.");
                System.out.println("다른 아이디로 회원가입을 계속 진행하시겠습니까? (y or n) :");
                String order = br.readLine();
                if(order.equals("y")){
                    continue;
                }
                else if (order.equals("n")) {
                    return;
                }
                else {
                    System.out.println("다시 입력해주세요.");
                }
            }

            System.out.print("비밀번호를 입력하세요 : ");
            String password = br.readLine();
            System.out.println();

            Member member = new Member(id,password);
            repository.put(id,member);
            System.out.println("정상적으로 회원가입 되었습니다.");
            break;
        }
    }
    static public void SystemOff(){
        System.out.println("프로그램이 종료됩니다.");
        System.exit(0);
    }
}
class Member{
    String id;
    String password;
    public Member(String id, String password) {
        this.id = id;
        this.password = password;
    }

    public String getId() {
        return id;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

 

728x90

'LikeLion🦁' 카테고리의 다른 글

감자의 MT 참여하기  (3) 2023.05.16
우리 아이가 사고쳤어요~  (0) 2023.05.09
사자가 된 감자 4주차  (1) 2023.05.07
사자가 된 감자 3주차  (2) 2023.05.02
사자가 된 감자 1주차  (0) 2023.04.05
'LikeLion🦁' 카테고리의 다른 글
  • 우리 아이가 사고쳤어요~
  • 사자가 된 감자 4주차
  • 사자가 된 감자 3주차
  • 사자가 된 감자 1주차
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (1) N
        • 프리코스 회고록 (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    누적합
    자바
    티스토리챌린지
    BFS
    나는 감자
    Spring
    백준
    어렵다
    타임리프
    뛰슈
    DFS
    모각코
    감자
    오블완
    프리코스
    회고록
    8기
    JPA
    그래프 순회
    절개와지조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
사자가 된 감자 2주차
상단으로

티스토리툴바