1. gradle 은 빌드를 위한 라이브러리로서 build.gradle 파일 내 dependencies 에서 숫자를 바꿔주면 버전 변경이 가능
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.woowacourse-projects:mission-utils:1.0.0'
}
변경을 하면, mavenCentral() 이라는 곳에서 자동으로 버전을 다운로드 한다.
2. 인텔리제이에서 psvm 뿐 아니라 main이라고 적고 탭해도 public static void main(String[] args) 생성됨
3. PACKAGE는 관련있는 Class 파일들을 모으는 역할을 한다. 패키지(= 폴더)
4. 패키지.model (또는 domain)는 실제 사용하고자 하는 비즈니스 로직이 들어있는 패키지
5. 인텔리제이에서 생성자 생성 단축키는 alt+insert (맥은 cmd+n) > Constructor
6. 메소드 add(int mumber1, int number2) 부분은 메소드의 시그니처 라고 부름
public int add(int number1,number2) {
return 0;
}
7. 선언과 할당
public class Application{
Calculator teacher; // 선언
teacher = new Calculator(); // 할당
}
선언 : teacher 변수에 Calculator 라는 타입을 선언
할당 : new Calculator(); 생성자를 teacher 에 할당
8. 클래스 변수(class variable)는 공유하는 값으로 계속 시비를 걸린다
public class Calculator {
public static int shareResult = 0; // 클래스변수
public int result = 0;
public Calculator() {
}
public int add(int number1, int number2) {
result = number1 + number2;
shareResult = result;
return result;
}
}
public class Main {
public static void main(String[] args) {
Calculator teacher = new Calculator();
System.out.println(teacher.add(1,3));
System.out.println(teacher.shareResult);
Calculator calculator = new Calculator();
System.out.println(calculator.add(2000,22));
System.out.println(calculator.shareResult);
System.out.println(teacher.result); //4
System.out.println(teacher.shareResult); //2021
}
}
얼핏보면 마지막 System.out.println(teacher.shareResult); 값이 0이 나올것 같다.
static으로 지정했으니 불변하는 값처럼 보일 수 있지만, 계속 시비를 걸린다.
calculator 객체 메소드에 의해 shareResult 값이 변경 된 채로 유지된다.
> 자바의정석에서도 이렇게 표현하는 것은 잘못된 표현이라고 한다.
동작은 하지만 Class.클래스변수 로 작성해주는것이 혼란방지를 위해 맞다고 한다.
즉, 위의 예에서는 teacher.shareResult 대신 Calculator.shareResult 라고 작성해주는 것이 맞다.
9. 객체지향의 정의
1) 기능을 가지고 있는 클래스를 인스턴스화 한다.
2) 필요한 기능을 역할에 맞는 인스턴스가 수행하게 한다.
3) 각 결과를 종합한다.
10. 인텔리제이에서 제공하는 ctrl+alt+L은 클래스 내부만 코드포매팅을 해준다. 패키지 전체를 적용하려면 패키지 폴더명을 한 번 클릭하고 ctrl+alt+L을 하면 모두 자동정렬됨
11. String을 int로 변환할 때 Integer 클래스의 parseInt 대신 valueOf를 사용했다.
찾아보니 valueOf는 Integer 객체를 반환하고 parseInt는 int 타입으로 반환한다.
List<Integer>에 넣을 것이라 valueOf를 사용했다.
12. Test를 빠르게 만들려면 Test 클래스에서 똑같이 alt+insert > Test Method 선택하면 빠르게 만들수 있다
13. 테스트코드 의의와 사용법
출력문을 직접 눈으로 확인할 필요 없이 컴퓨터가 확인하게끔 하는 것이다.
class RefereeTest {
@Test
void 스트라이크3() {
Referee referee = new Referee();
String result = referee.compare(Arrays.asList(1, 2, 3), Arrays.asList(1, 2, 3));
assertThat(result).isEqualTo("0볼 3스트라이크");
}
@Test
void 볼1() {
Referee referee = new Referee();
String result = referee.compare(Arrays.asList(1, 2, 3), Arrays.asList(2, 6, 9));
assertThat(result).isEqualTo("1볼 0스트라이크");
}
}
assertThat(입력값).isEqualTo(예상값) : 입력값과 예상값이 정확히 같은지 확인
실행시 통과하지 못하여 아래와 같이 오류메시지가 뜬다.
expected : 예상값
but was : 실제값
위 코드에서 객체가 중복 생성되는데 아래와 같이 void setUp() {} 메소드를 만들어서 테스트를 할때마다 객체 생성하는 것을 막아줄 수도 있다.
class RefereeTest {
private Referee referee;
@BeforeEach
void setUp() {
referee = new Referee();
}
@Test
void 스트라이크3() {
String result = referee.compare(Arrays.asList(1, 2, 3), Arrays.asList(1, 2, 3));
assertThat(result).isEqualTo("0볼 3스트라이크");
}
@Test
void 볼1() {
String result = referee.compare(Arrays.asList(1, 2, 3), Arrays.asList(2, 6, 9));
assertThat(result).isEqualTo("1볼 0스트라이크");
}
}
arrays.aslist나 기타 등등도 중복을 줄여주는 방법이 있지만 생략한다!
14. 여러가지 경우에 대해서 테스트할때 @ParameterizedTest 가 있다.
@CsvSource({"넣을값1","넣을값2"})
@ParameterizedTest
@CsvSource({"1,2,3,0볼 3스트라이크","2,6,9,1볼 0스트라이크"})
public void compare(int number1, int number2, int number3, String expected) {
String actual = referee.compare(Arrays.asList(1, 2, 3), Arrays.asList(number1, number2, number3));
assertThat(result).isEqualTo(expected);
}
'성장기록 > 우테코(프리코스)' 카테고리의 다른 글
우아한테크코스 5기 우테코 프리코스 3주차 회고 (0) | 2022.11.16 |
---|---|
프리코스 2주차 공통 피드백 (0) | 2022.11.16 |
우아한테크코스 5기 우테코 프리코스 2주차 회고 (0) | 2022.11.09 |
프리코스 1주차 공통 피드백 (0) | 2022.11.06 |
우아한테크코스 5기 우테코 프리코스 1주차 회고 (3) | 2022.11.02 |
남에게 설명할 때 비로소 자신의 지식이 된다.
포스팅이 도움되셨다면 하트❤️ 또는 구독👍🏻 부탁드립니다!! 잘못된 정보가 있다면 댓글로 알려주세요.