[TIL] 2월 9일

yeon·2021년 2월 9일
0

Git 명령어 정리

[Git] 명령어(2) - remote, push, clone, pull

  1. git remote

    • local repository에 연결된 remote repository를 확인하는 명령어
    • git remote add {별칭} {원격저장소 URL 주소}
    • 별칭은 주로 origin
  2. git push

    • git push {원격 저장소명} {원격 브랜치명}
    • 아래의 두 명령어는 같은 일을 한다.
      • git push -u {원격 저장소명} {로컬 브랜치명}
      • git push - -set-upstream {원격 저장소명} {로컬 브랜치명}
      • 브랜치를 추적하도록 하는 것
    • git push - -delete {원격 브랜치명}
      • remote repository에 있는 브랜치 삭제
  3. 원격 저장소에서 파일 가져오기

    • git clone
      • git clone {원격 저장소 URL}
      • git clone -b {브랜치명} {원격 저장소 URL}
    • git clone 과 git pull 비교
      • git clone은 Github의 모든 파일을 가져오기만 한다.
      • git pull은 local repository와 비교하여 병합하고, local repository에 저장(add)까지 수행
        • git pull = git fetch + git merge
        • git fetch는 local에 연결된 remote repository의 브랜치 목록과 그 파일 내용을 최신으로 업데이트한다.
          • local과 remote의 싱크를 맞추는 새로고침 역할
        • git merge는 두개의 branch를 병합하는 명령어
  4. rebase

    https://victorydntmd.tistory.com/279 → 참고하기

    • rebase는 merge처럼 병합하는 작업이지만, 커밋 이력을 다룰 수 있다.
    • merge보다 히스토리(log)가 깔끔해진다.
    • git pull - -rebase {원격 저장소 별명} {브랜치명}
    • 위의 명령어는 git fetch + git rebase 와 같다.

step2에서 step1을 merge했는데 터미널에서는 오류가뜨고 인텔리제이에서는 step1의 변경된 코드가 잘 적용이 되었다.

스크린샷 2021-02-09 오후 2 29 32

그냥 step2에서 add하고 commit 을 해주었다. (-m "Merge brance 'step1-getting-started' ")

터미널에서 왜 에러가 난것일까?

자바 테스트 코드 짜기(루카스) 연습

new 프로젝트로 Gradle 선택해서 새로운 프로젝트 생성함

문제점 왜 @Before와 @After에 해당되는 내용은 안나오지?

루카스내용을 실습했는데 테스트 실행 결과에서 @Before와 @After에 해당되는 메소드안의 출력문은 왜 출력이 안되는 걸까.
-> 어노테이션 더 학습해보기

메소드에서 기능 분리하는 법

분리하고 싶은 코드 드래그 + 우클릭 → Refactor → Extract Method

빌드 도구란?

[Spring] Maven? 빌드 도구란?

빌드란?

소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정

컴파일, 테스팅, 배포 등 모든 과정의 집합

빌드도구는 이러한 빌드 과정을 자동으로 수행해준다.

Maven, Gradle 등이 있음

Gradle

Maven과 Gradle의 차이

  • 빌드 스크립트를 통해 사용할 어플리케이션의 버전, 라이브러리 등의 항목을 설정할 수 있다.
  • 라이브러리 관리 : 설정되니 서버를 통하여 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있다. 자신이 추가한 라이브러리도 레파지토리 서버에 올릴 수 있다.
  • 프로젝트 관리 : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와준다.
  • 단위 테스트 시 의존성 관리 : junit 등을 사용하기 위해서 명시한다.

TDD

아래 영상을 보고 TDD란 무엇인가 학습했다.

내가 TDD에 집착하는 이유는?

나는 왜 TDD에 집착하는가?

  • TDD : Test Driven Development

  • 라이브 코딩 하시는 것을 보니, 테스트 코드를 구현하고, 프로덕션 코드를 구현한다.

    • 프로덕션 코드를 리팩토링하면서 테스트 코드를 실행해본다.
  • 메인메소드에서만 test해보았는데 TDD 방식이 훨씬 효율적인 것을 알았다.

  • 진정한 리팩토링을 위해서는 Test코드가 필요하다.

  • Test 코드가 뒷받침 되어야 코드를 자유롭게 수정해볼 수 있다.

  • 요구사항 추가, 변경으로 인해 코드를 수정할 때가 많은데 이 경우 테스트 코드가 있으면 불안감이 줄어든다.

  • 처음부터 완벽한 설계를 하는 것이 아니라 점진적으로 개선한다.

  • main method 테스트 문제점을 해결하기 위해 나온 도구 : JUnit

JUnit5

  • 자바 개발자가 가장 많이 사용하는 테스팅 프레임워크
  • 어노테이션을 활용한 단위 테스트
    • @BeforeEach, @Test, @AfterEach
    • Assert클래스의 static 메소드가 있지만 더 편리한 AssertJ를 많이 사용한다
  • JUnit5 = JUnit 플랫폼 + JUnit Jupiter + JUnit 빈티지
    • JUnit 플랫폼 : 테스트를 실행해주는 런처 제공, TestEngine API 제공
      • JUnit 플랫폼과 IDE를 통해서 테스트 코드를 실행
    • JUnit Jupiter : Test Engine API 구현체로 JUnit5를 제공
    • JUnit 빈티지 : JUnit3과 JUnit4를 가능하게 해주는 테스트 엔진

JUnit과 AssertJ 함께 사용하기

사이트 내용 간략히 정리함, 필요시에 들어가서 보기

AssertJ / Fluent assertions for java

  1. Get AssertJ Core assertions

    • Gradle

    • testCompile("org.assertj:assertj-core:3.11.1")

    • dependencies 에 추가하기

  2. Add AssertJ methods static import

    • import static org.assertj.core.api.Assertions.*;
  3. Use code comletion

    • assertThat()과 같은 코드 사용하기

자바의 정석 9장 java.lang 패키지

  • java.lang 패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.
  • import문 없이 사용 가능
  • String 클래스나 System 클래스

hashCode() (453p)

객체의 지문

  • 객체의 주소를 int로 변환해서 반환

  • 클래스의 인스턴스변수 값으로 객체의 같고 다름을 판단할 때 equals()뿐만 아니라 hashCode()도 오버라이딩 해주어야함

  • HashMap과 HashSet과 같은 클래스는 해싱 기법을 사용한다.

    → HashMap 과 HashSet에 저장할 객체라면 반드시 equals()와 hashCode() 둘 다 오버라이딩 해야함

String 클래스 (465p)

  • 변경 불가능한 immutable 클래스
  • 문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많이 필요한 경우에는 String클래스 보다는 StringBuffer 클래스를 사용하는 것이 더 좋다.
  • StringBuffer 인스턴스에 저장된 문자열은 변경 가능

문자열의 비교

  • 문자열을 만들때는 문자열 리터럴을 대입하는 방법과 String 클래스의 생성자를 사용하는 경우가 있다.

  • 리터럴을 사용하는 경우

    • String str1 = "abc";

      String str2 = "abc";

      → 이 경우 str1과 str2의 주소값이 같다.

  • new 연산자로 String 클래스 생성자 사용하는 경우

    • String str1 = new String("abc");

      String str2 = new String("abc");

      → 이 경우 str1과 str2의 주소값이 다르 다

      new 연산자 사용시 항상 새로운 객체 생성

문자열 리터럴

  • 같은 내용의 문자열 리터럴은 한번만 저장됨
  • 상수 저장소(constant pool)에 저장됨

오늘 한일

  • JUnit이란? JUnit과 assertJ으로 테스트코드 작성하기, 빌드 툴이란? TDD의 장점, 효과
  • git remote, push, pull, rebase, fetch, merge
    • rebase는 아직도 잘 모르겠다. 직접 명령어를 사용해봐야 이해할듯
  • 자바의 정석 9장 String
  • 매일 코드 작성하다가 main 메소드에서만 테스트 해보았는데 드디어 Test code를 작성하는 법을 알게 되었다. 어노테이션별로 기능은 더 공부해야겠다.
  • git merge 하다가 터미널에서는 에러가 떴는데 인텔리제이에서는 원하는 브랜치의 코드가 잘 반영이 되어있었다. 뭐지..

0개의 댓글