외부 라이브러리 사용하기
gradle : Build Tool
GroupId
ArtificatID
Version
1. 숫자와 점으로 이루어진 일반적인 버전 형태를 사용한다(1.0, 1.1, 1.0.1, …).
build.gradle은 빌드 툴 실행과 외부 라이브러리 관리해주는 곳
1. 필요한 라이브러리 검색
Maven Central Repository Search
2. Gradle과 관련된 내용 복사 및 붙여넣기
외부라이브러리를 이용해서 사용하는 것도 중요한 능력
예를들어 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 라이브러리 사용하기
Lombok Gradle과 관련된 내용 build.gradle에 추가
인텔리제이 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);
}
}
구현하기
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 중점의 설계
하지만 이번 강의를 들으면서 느낀점은 객체로 나누어서 설계방식의 중요성을 느낌
유지보수나 확장성에서 용이
인터페이스 및 람다 함수의 활용 여부에 따라 코드의 간결화 (클린 코드) 가능