테스트케이스와 TDD 방법론
1일차 : 가입 기능 제작 -> 가입 테스트
2일차 : 로그인 기능 제작 -> 가입 테스트 & 로그인 테스트
3일차 : 로그아웃 기능 제작 -> 가입 테스트 & 로그인 테스트 & 로그아웃 테스트
이런 식으로....
Test Driven Development
- Red 단계에서는 실패하는 테스트 코드를 먼저 작성한다.
- Green 단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성한다. (최대한 빠르게, 꼼수 가능)
- Blue 단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행한다.
위 과정을 반복하면서 구현해나간다.
테스트 케이스 작성하기
build.gradle 파일에 추가, 아이콘 뜨면 클릭해준다.
testImplementation 'org.assertj:assertj-core:3.11.1'
어노테이션 추가, 'assertThat' import하여 테스트 케이스를 작성한다.
(org.assertj.core.api.Assertions.assertThat)
@Test
@DisplayName("3, 4 => 12")
void t1(){
assertThat(new Solution().solution(3, 4)).isEqualTo(12);
}
프로그래머스 알고리즘 풀이 업로드용 깃허브
https://github.com/yurrrrri/ct
** 깃에서 외부 프로젝트를 가져올 때
인텔리제이 웰컴 창에서 Get from VCS -> 외부 프로젝트 깃허브 url 붙여넣기 -> clone
기존의 원격 리포지터리 연결을 끊기 위해 'git remote remove origin' 입력
내 원격 리포지터리로 연결 'git remote add origin 깃허브_리포지터리_주소'
'git push origin main' (git add . 는 하지 않아도 됨)
Static
- 메서드 앞에 static 키워드를 붙이면 객체 생성없이 클래스를 통해 메서드를 직접 호출할 수 있다.
- 변수와 메서드에 static 키워드를 붙이면 각각의 객체가 아닌 클래스가 변수, 메서드를 가진다.
클래스를 생성하면
- 리모콘을 만들 수 있다.
- 변수를 만들 수 있다.
- 객체를 생성할 수 있다.
객체 지향
- 객체 지향은 중복 코드를 없애기 위해서 존재한다. 객체 지향적인 방식으로
- 객체 지향적인 구조를 위해서 일부러 중복 코드를 허용하는 경우도 있다.
상속
자바는 다중 상속을 허용하지 않는다. 메서드가 중복되는 등 애매한 경우를 방지하기 위해.
(문제점 : 복잡한 구조를 상속만으로 해결하려 하면, 중복 코드를 없애지 못할 수도 있다.)
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.숨쉬다();
}
}
class 동물 {
void 숨쉬다() {
System.out.println("숨쉬다.");
}
}
class 사람 extends 동물{
}
사람 extends 동물 ===> 사람 is 동물.
다형성
public class Main {
public static void main(String[] args) {
동물 a사람 = new 사람(); // 자동형변환
}
}
class 동물 {
void 숨쉬다() {
System.out.println("숨쉬다.");
}
}
class 사람 extends 동물{
}
사람을 조종하는 리모콘은 곧 동물을 조종하는 리모콘
===> '동물 a사람 = new 사람();' 이 가능하다.
public class Main {
public static void main(String[] args) {
무기 a무기 = new 칼();
a무기.공격(); // 불가능!! 무기 class에는 공격 메서드가 없다.
}
class 무기{}
class 칼 extends 무기 {
void 공격(){System.out.println("공격");}
}
무기 class에 'void 공격(){}'을 추가하면 실행이 된다.
매개변수와 인스턴스 변수 활용
public class Main {
public static void main(String[] args) {
전사 a전사 = new 전사();
a전사.공격("브라이언", "칼");
a전사.재공격();
}
}
class 전사{
String name;
String weapon;
void 공격(String name, String weapon){
this.name = name;
this.weapon = weapon;
System.out.println(name+"(이)가 "+weapon+"(으)로 공격합니다.");
}
void 재공격(){
System.out.println(name+"(이)가 "+weapon+"(으)로 공격합니다.");
}
}
객체 형변환
public class Main {
public static void main(String[] args) {
자동차 a자동차 = new 페라리();
페라리 a페라리 = (페라리)a자동차;
}
}
class 자동차 {}
class 페라리 extends 자동차 {}
컴파일 타임과 런타임
문법 오류 등은 컴파일 에러(error), 실행을 해야 알 수 있으면 런타임 에러(Exception)
'프로젝트 & TIL > 일별 공부 기록 (백엔드 스쿨)' 카테고리의 다른 글
7일차 - 깃 병합과 자바(컬렉션 프레임워크(리스트, 맵)) (0) | 2023.02.28 |
---|---|
6일차 - 깃 브랜치와 자바(String, 객체 메서드, static, 제네릭, 키보드 입력받기) (0) | 2023.02.27 |
5일차 - 자바 생성자 (0) | 2023.02.24 |
3일차 - 자바의 기본 (0) | 2023.02.22 |
2일차 - 인텔리제이 세팅 & 깃 세팅 및 사용 (0) | 2023.02.22 |