목록전체 글 (113)
모눈종이에 사각사각
단위 테스트를 하는 방법을 조금씩 공부를 하고 있던 중, 반환값이 없는, 즉 프린트한 결과값을 통해서는 테스트를 어떻게 하는지 궁금하여 찾아보았다. 내가 하려고 한 테스트는 게임의 상태를 출력하는 것이다. 게임 상태 클래스는 다음과 같다. public class GameState { private int strike; private int ball; public GameState() { this.strike = INITIAL_NUMBER; this.ball = INITIAL_NUMBER; } public void addStrike() { ++strike; } public void addBall() { ++ball; } public int getStrike() { return strike; } public..
[우테코 프리코스 2주차] NsTest 분석에 이어서 테스트코드에서 사용된 Assertions클래스의 메서드를 분석해보려고 한다. 일단 위의 게임종류_후_재시작()부분의 코드를 보면 컴퓨터가 (1, 3, 5)를 생각했을 때 사용자가 "246"을 입력하면 "낫싱"을, "135"를 입력하면 "3스트라이크"를 출력해야 한다는 뜻이며 "1"을 입력하면 재시작하고, 컴퓨터가 (5, 8, 9)를 생각했을 때 사용자가 "297"을 입력하면 "1볼 1스트라이크"을, "289"를 입력하면 "3스트라이크"를 출력해야 한다 그리고 "2"를 입력하면 "게임 종료"를 출력해야 한다는 뜻이다. 예외_테스트()부분은 사용자가 3자리 숫자가 아닌 다른 숫자를 입력했을 때 예외가 발생해야 한다는 것이다. ⚾ assertRandomNu..
2주차에서 우리가 이뤄야할 것들 중 하나가 테스트 코드에 익숙해지고, 테스트 도구를 잘 다루는 것이다. 아직 테스트 코드에 대해 모르는 것이 많아 이 기회에 하나씩 정리해가며 분석해보려고 한다. 2주차의 과제 테스트는 NsTest 클래스의 메서드를 활용해서 진행된다. ⚾ run 메서드 게임종료_후_재시작() 테스트코드를 보면 run()이 들어가있는 것을 확인할 수 있다. run()은 다음과 같이 구현되어 있다. protected final void run(final String... args) { command(args); runMain(); } ⚾ command 메서드 run() 안에 있는 command()은 다음과 같다. private void command(final String... args) {..
🌙 표준 입력 스트림이란? System.setIn에 대해 조사하다가 표준입력스트림(standard input stream)이라는 단어가 나왔다. 여기서 "표준"이 의미하는 것이 무엇인지 궁금해졌다. 먼저 스트림에 대해 알아보도록 하자. 스트림(Stream) 자바에서 입출력을 수행하려면, 즉 어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이를 스트림이라고 한다. 스트림(stream) : 프로그램을 드나드는 데이터를 바이트의 흐름으로(byte stream) 표현한 단어 스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. 따라서 입출력을 동시에 하려면 입력 스트림(input stream)과 출력 스트림(..
우아한테스코스의 4주간의 프리코스 기간이 시작됐다. 앞으로 4주동안 공부한 내용을 꾸준히 기록해보려고 한다. 🍁 진행 방식 미션은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 세 가지로 구성되어 있다. 세 개의 요구 사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다. 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다 문제는 총 7문제이다. 🍁 미션 문제1 ## 🚩 구현할 기능 목록 - [x] 페이지 번호 각 자리 모두 더하기 - [x] 페이지 번호 각 자리 모두 곱하기 - [x] 나올 수 있는 4가지의 수 중 가장 큰 수 구하기 - [x] 시작면이나 마지막 면이 나오면 에러 처리하기 - [x] 왼쪽 페..
🌙 String 클래스 1. String 클래스는 immutable(변경불가능한) 클래스이다. 한 번 생성된 String인스턴스가 가지고 있는 문자열은 읽을 수만 있고, 변경할 수 없다. '+' 연산자를 이용해서 문자열을 결합하는 경우, 인스턴스 내의 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String 인스턴스가 생성되는 것이다. 다음과 같이 코드를 작성해 보았을 때 기존의 a의 주소와 a+=b 연산을 마친 후의 a의 주소가 달라졌음을 확인할 수 있다. 2. 문자열의 비교 문자열을 만드는 방법은 두 가지가 있다. String s1 = "가나다"; // 문자열 리터럴 지정 String s2 = "가나다"; // 문자열 리터럴 지정 String s3 = new String("가나다"); // St..
파이썬에는 isalpha(), isdigit(), isalnum(), islower(), isupper(), lower(), upper() 등 문자열이 알파벳인지, 숫자인지 등을 판별해주는 함수가 있다. 자바에도 그러한 기능을 하는게 있다. Character.isAlphabetic(), Character.isLetter() // 문자인가?(한글 포함) Character.isDigit() // 숫자인가? Character.isLetterOrDigit() // 문자 또는 숫자인가? Character.isLowerCase() // 소문자인가? Character.isUpperCase() // 대문자인가? Character.toLowerCase() // 소문자로 Character.toUpperCase() // 대..
github이란? git을 웹에 옮겨 놓은 원격 저장소 git은 로컬 저장소 github을 사용해야 공유(협업)가능 코드 복구 가능 add - staging area에 파일 추가 commit - staging area에 있는 파일을 로컬 저장소에 추가 push - 로컬 저장소에 있는 파일을 원격 저장소에 추가 -> git push [원격 저장소 이름] [원격 저장소 브랜치 이름] 참고사이트 https://youtu.be/Z9dvM7qgN9s
🌙 @Override @Override 어노테이션은 메서드 앞에만 붙일 수 있는 어노테이션으로, 조상의 메서드를 오버라이딩하는 것이라는 것을 컴파일러에게 알려주는 역할을 한다. 만약 Child가 Parent의 parentMethod()를 오버라이딩 하려고 할 때, 메서드 이름을 잘못 적었다면? @Override annotation이 붙어있었다면 이렇게 에러메시지를 출력한다. 그러나 만약 @Override 를 붙이지 않았다면? 컴파일러는 오버라이딩 한 메소드인지 알지 못해 잘못 썼는지 판단하지 못한다. 새로운 이름의 메서드가 추가된 것이라고 인식한다. 따라서 에러메시지가 출력되지 않는다. 📚 참고자료 남궁성, 『자바의 정석』, 도우출판
List에서 중복을 제거하려면 어떻게 해야할까? Set 이용하기 먼저 List를 Set으로 변경하여 중복을 제거해준다음 다시 List로 반환하는 방법이 있다. List list = List.of(1, 2, 3, 4, 5, 1, 1, 1); System.out.println("list = " + list); Set set = new HashSet(list); List list2 = new ArrayList(set); System.out.println("list2 = " + list2); /** * list = [1, 2, 3, 4, 5, 1, 1, 1] * list2 = [1, 2, 3, 4, 5] */ Stream의 distict() 이용하기 Java8부터는 Stream의 distict()를 이용해서 중..