TIL / 0806 / 자바 프로젝트 설계

zio도미닉·2021년 8월 10일
0

자바

목록 보기
2/2

야구 프로젝트 실습

  • 외부 라이브러리 사용하기

    • gradle : Build Tool

      1. 빌드한다 / 실행한다
      2. 외부 Dependency Library 설치
      • GroupId

        1. groupId는 package 명명 규칙을 따르도록 한다.
        2. groupId는 당신의 프로젝트를 모든 프로젝트 사이에서 고유하게 식별
        3. 즉, 최소한 당신이 컨트롤하는 도메인 네임이어야 한다.
        4. 예: org.apache.maven, org.apache.commons
      • ArtificatID

        1. artifactId는 버전 정보를 생략한 jar 파일의 이름
        2. 단, 소문자로만 작성
        3. maven, commons-math
      • Version
        1. 숫자와 점으로 이루어진 일반적인 버전 형태를 사용한다(1.0, 1.1, 1.0.1, …).

    • build.gradle은 빌드 툴 실행과 외부 라이브러리 관리해주는 곳

1. 필요한 라이브러리 검색

Maven Central Repository Search
2. Gradle과 관련된 내용 복사 및 붙여넣기

  1. 추가하기
  • 외부라이브러리를 이용해서 사용하는 것도 중요한 능력

    • 예를들어 Faker 라이브러리를 사용해서 필요한 기능 사용

      package com.programmers.java.baseball;
      
      import com.github.javafaker.Faker;
      
      import java.util.Arrays;
      import java.util.stream.Stream;
      
      public class Main {
          public static void main(String[] args) {
      
              Faker faker=new Faker();
              String title=faker.name().fullName();
              System.out.println(title);
      
              String test=faker.starTrek().character();
              System.out.println(test);
      
              long r=faker.number().randomNumber();
      
              Integer [] nums=Stream.generate(()->faker.number().randomDigitNotZero())
                      .distinct()
                      .limit(10)
                      .toArray(Integer[]::new);
      //                .forEach(System.out::println);
      
              System.out.println(Arrays.toString(nums));
      
      //        System.out.println("Hello world");
      
          }
      
      }
    • Lombok 라이브러리 사용하기

      1. Lombok Gradle과 관련된 내용 build.gradle에 추가

        Gradle

      2. 인텔리제이 plugin에서 설치

  • Lombok을 이용한 코드 간결화

package com.programmers.java.baseball;

import lombok.*;

// 롬북
@NoArgsConstructor   //기본 생성자
@AllArgsConstructor //생성자
@ToString           //toString
@EqualsAndHashCode  // equals
@Getter             // getter
@Setter             // setter

// 총 통들어서 ==> @Data
@Data
public class User {
    private int age;
    private String name;

//    public User(int age, String name) {
//        this.age = age;
//        this.name = name;
//    }
}
package com.programmers.java.baseball;

import com.github.javafaker.Faker;

import java.util.Arrays;
import java.util.stream.Stream;

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

        User user=new User(1,"a");
        User user2=new User(1,"a");
        System.out.println(user);
        System.out.println(user.equals(user2));

        user.setName("zzz");
        System.out.println(user.getAge());
        System.out.println(user.getName());

        // 기본 생성자
        User user3=new User();
        System.out.println(user3);
    }
}
  • 설계하기
  • 숫자야구 게임 설계
  • 요구사항 파악하기
    1. 게임의 룰을 이해
    2. 동작환경, 데이터의 범위
      • 3자리 숫자 사용 (확장 가능)
      • 중복된 숫자를 사용하지 않는다.
      • 1~9를 사용한다 (0은 사용하지 않는다)
      • Console 상에서 동작하는 프로그램 제작.
  • 일을 객체로 나누기 / 객체를 연관짓기
    • Engine (실제 게임이 동작되는 곳)
      1. BaseBall
      2. NumberGenerator
      3. Input
      4. Output
    • Application (입력받는 주체가 되는곳)
      1. App
      2. Console
      3. FakeNumberGenerator
  • 핵심로직 설계하기
    1. Class Diagram
  1. Flow Chart
  • 구현하기

  • Race Condition 발생 가능성

    private BallCount ballCount(Numbers answer, Numbers inputNumbers) {
        int strike=0;
        int ball=0;
    
    		// 멀티 쓰레드 동작의 경우 strike와 ball 같은 경우 Race Condition이 발생 가능
    		
        answer.indexedForEach((a,i)-> {
            inputNumbers.indexedForEach((n,j)-> {
                if (a!=n) return;
                if (i.equals(j)) strike+=1;
                else ball+=1;
            });
        });
    
        return new BallCount(strike,ball);
    }

    느낀 점

  • 기존에 자바 설계 과정은 Main 중점의 설계

  • 하지만 이번 강의를 들으면서 느낀점은 객체로 나누어서 설계방식의 중요성을 느낌

  • 유지보수나 확장성에서 용이

  • 인터페이스 및 람다 함수의 활용 여부에 따라 코드의 간결화 (클린 코드) 가능

profile
BackEnd Developer

0개의 댓글

관련 채용 정보