단위 테스트를 왜 해야할까?

  1. 코드를 수정하거나 기능을 추가할 때 수시로 빠르게 검증할 수 있다.
  2. 리팩토링 시에 안정성을 확보할 수 있다.
  3. 개발 및 테스팅에 대한 시간과 비용을 절감할 수 있다.

Assertions.assertThat() or assertThat()?

  • 특정 조건을 검증하기 위해 사용되며 예상되는 결과와 실제 결과를 비교하여 테스트를 수행
  • 주로 단위 테스트나 통합 테스트에서 사용
  • assertThat(테스트 타겟).메소드1().메소드2().메소드3();
  • 사용될 수 있는 메소드로는 isEqualTo(e), contains(e), doesNotContain(e), startsWith(e), endsWith(e), isNotEmpty(), isPositive(n), isGreaterThan(n) 등이 있다.
@Test
@DisplayName("2, 3 => -1")
void t1() {
assertThat(new Solution().solution(2, 3)).isEqualTo(-1);
}

TDD (Test Driven Development)

- 실패하는 테스트를 만드는게 먼저
- 실패를 제거 (어떤 방식이던 상관없다.)
- 리팩토링

순서

  1. 실패하는 작은 단위 테스트를 작성한다. 처음에는 컴파일조차 되지 않음.
  2. 빨리 테스트를 통과하기 위해 어떤 방식으로든 상관없이 작성할 수 있다.
  3. 그 다음 테스트 코드도 작성한다.
  4. 새로운 테스트를 통과하기 위해 코드를 추가 또는 수정한다.
  5. 모든 중복을 제거하고 리팩토링한다.

*테스트 코드를 먼저 작성해야 하는 이유
*

  1. 깔끔한 코드를 작성할 수 있다.
  2. 장기적으로 개발 비용을 절감할 수 있다.

'IT' 카테고리의 다른 글

정적 웹 페이지와 동적 웹 페이지  (0) 2024.06.08
TCP, UDP  (0) 2024.06.06
변수? 객체? 클래스?  (1) 2024.06.04
컴파일 언어 & 인터프리터 언어  (0) 2024.06.04
JVM, JRE, JDK  (0) 2024.06.03

변수(variable)는 무엇인가?

  • '값'을 담을 수 있는 이름이 있는 '그릇' (변수의 이름을 잘 지어주어야 한다.)
  • 변수는 값을 바꿔 담을 수 있다.

ex)

  • int age = 36; // java
  • boolean success = true; //java
  • Car myCar = new Car("니로“); //java
  • channelName = "쉬운코드“ //python

객체(object)란 무엇인가?

  • 상태가 있고 행동을 하는 실체

클래스(Class)란 무엇인가?

  • 어떠한 속성이 있고 어떻게 행동하는지를 기술한 설계도
정리 
- 내가 원하는 속성과 행동을 구체적으로 기술한 것이 클래스
- 그렇게 기술한 대로 실체화 된 것이 객체

'IT' 카테고리의 다른 글

TCP, UDP  (0) 2024.06.06
테스트  (0) 2024.06.05
컴파일 언어 & 인터프리터 언어  (0) 2024.06.04
JVM, JRE, JDK  (0) 2024.06.03
Git & Github  (0) 2024.06.03

한정된 메모리, 즉 RAM의 공간 안에서 용량을 초과하지 않고 많은 작업들을 수행하기 위해서는 작업상 다루어야 할 데이터들의 종류에 따라 적절하게 메모리 공간을 할당할 필요가 있다.
언어마다 각 자료형은, 각각의 범주에 포함되는 모든 데이터들을 가장 효율적으로 저장해서 메모리를 절약할 수 있도록 설계되어 있다. 자료형은 데이터를 저장할 때 뿐 아니라 주어진 위치에서 데이터를 읽을 때도 중요하다.

컴파일 언어와 인터프리터 언어

1. 컴파일 언어

코딩을 마치고 나면 프로그래밍 언어로 짠 코드를 컴파일이란 과정을 통해서 다른 형태로 바꾸어 주게 된다. 그 결과물은 기계어일 수 도 있고, 자바의 .class 파일처럼 가상머신용 바이트코드일 수도 있다.
자바스크립트로 컴파일되는 타입스크립트같은 독특한 케이스도 있다.
이 컴파일이란 작업을 거치고 나서 그 결과물을 실행하는 것이 컴파일 언어의 특성이다.

2. 인터프리터 언어

코딩 후 다른 과정을 거치지 않는다. 개발자가 작성한 코드가 그대로 실행할 곳으로 보내져서 인터프리터라는 것을 통해 바로바로 기계어로 통역되어 실행된다.
예외들이 있지만, 보통 컴파일 언어들은 정적타입, 인터프리터 언어는 동적 타입의 자료들을 가지고 있다.
정적 타입이란 자바 코드에서처럼 변수 등에 지정된 자료형을 바꿀 수 없다는 것을 말한다. 반면 동적 타입을 사용하는 언어들에서는 변수에 얼마든 다른 자료형의 값을 넣을 수 있다.

컴파일 언어는 코드를 실행하거나 배포하기 전 즉 개발 과정에서 컴파일이란 과정을 거치기 때문에 코드 중 철자나 문법 상에 문제가 있을 때 그 과정에서 오류를 발생시켜서 잡아낼 수 있다.

변수나 인자의 자료형이 달라지는 경우도 이 과정에서 컴파일 오류로 걸러내버릴 수 있기 때문에 컴파일 언어는 개발자에게 자료형의 일관성을 요구하는 정적 타이핑에 보다 유리하다고 할 수 있다.

컴파일 오류

-> C 계열 언어나 자바, 스위프트, 코틀린 등의 언어들은 코딩을 마치고 사용자에게 배포되기 전에 개발자가 쓰는 프로그래밍 언어로 된 코드를 기계어 등 다른 형태로 바꾸어 주는 것이다. 예를 들면 자바코드의 경우 JVM에서 실행할 수 있는 class 파일로 변환해준다.

실행되기 전 반드시 해야하는 이런 일들을 컴파일이라 한다.

따라서 컴파일 오류라는 것은 문제가 있는 코드가 컴파일하는 과정중에 걸러지는 것

'IT' 카테고리의 다른 글

테스트  (0) 2024.06.05
변수? 객체? 클래스?  (1) 2024.06.04
JVM, JRE, JDK  (0) 2024.06.03
Git & Github  (0) 2024.06.03
개발용어  (0) 2024.06.02

 

 

 

 

 

JVM

  • 각 종류의 컴퓨터마다 JVM이라는 전담 통역센터가 존재
  • 우리가 자바로 코딩을 하고나서 컴파일을 하면 기계어는 아니고, 바이트 코드라는 것이 생긴다. 사람이 쓰는 자바 코드에서 컴퓨터가 읽는 기계어로의 중간 단계에 있는 코드라고 생각하면된다.

우리가 자바로 Hello.java를 작성하고 나서 파워쉘이나 터미널에 javac(자바 컴파일러), javac Hello.java 라는 명령을 내리면 같은 위치에 Hello.class가 만들어진다. 이 .class 파일이 바이트코드이다.
이 바이트코드를 실행한 컴퓨터에 깔린 JVM에 갖다주면 그 컴퓨터가 이 프로그램을 실행할 때 JVM이 바이트코드를 그때그때 기계어로 통역을 해준다.

*JVM은 자바로 짜서 컴파일한 소프트웨어들이 JVM이 깔린 어떤 종류의 컴퓨터에서든 돌 수 있게 해주는 것 *

JRE(Java Runtime Environment)

  • 자바로 짠 소프트웨어가 컴파일 및 빌드까지 다 된 다음 이를 사용할 곳에 주어져서 실행이 될 때 그 환경 요소들로서 필요한 것들

JDK(Java Development Kit)

  • 자바 개발 도구, 자바의 런타임때 필요한 요소들도 포함을 한다.

'IT' 카테고리의 다른 글

변수? 객체? 클래스?  (1) 2024.06.04
컴파일 언어 & 인터프리터 언어  (0) 2024.06.04
Git & Github  (0) 2024.06.03
개발용어  (0) 2024.06.02
가상메모리_3  (0) 2024.06.02

Git이 왜 필요할까?

1. 버전관리

  • 소프트웨어를 만드는 과정에서 그리고 운영하는 과정에서 계속해서 뭘 더하고 빼고 고치고 수정을 하게된다. 그런데 나중에 이전 기능을 다시 가져오게 될 수 도 있고 누가 실수로 잘못된 코드를 섞으면 복원해야 할 때도 있고 코드가 어디가 어떻게 바뀌었는지 과거내역을 확인해야 할 때가 있기 때문에 바뀌기 전 내역들도 중간중간 저장을 해 놓아야 한다.

2. 협업

  • git은 버전관리를 위한 소프트웨어이고, github는 이 git으로 저장되어서 원격전송된 파일들이 저장되는 공간을 제공하는 서비스이다.

'IT' 카테고리의 다른 글

컴파일 언어 & 인터프리터 언어  (0) 2024.06.04
JVM, JRE, JDK  (0) 2024.06.03
개발용어  (0) 2024.06.02
가상메모리_3  (0) 2024.06.02
가상메모리_2  (0) 2024.06.01

디버깅

디버깅이란 소프트웨어에 발생한느 문제의 원인을 찾는 것이다. 어떤 새로운 기능을 만들어 넣거나, 기존 기능을 수정하는 작업도 이를 완료하는 과정까지 많은 디버깅 과정을 거치게 된다. 프로그램이 복잡해질수록 디버깅하는 방식도 다양해진다.

컴파일

개발자가 작성한 프로그래밍 코드를 출시 전에 번역하는 것이다.
자바언어로 코드를 작성하고, 컴파일러에 명령을 내리면 class라는 확장자가 생성된다. 이 class 파일은 자바 가상 머신(JVM)이라는 프로그램이 설치된 모든 종류의 기계에서 통용되는 기계 언어이다.
프로그래머는 자바 언어로 짠 코드를 이 JVM용 언어로 번역시킨 뒤 이 기계들에 보내서 소프트웨어가 동작하도록 하는 것이다.

인터프리터(InterPreted) 언어

다른 말로는 스크립트언어라고도 한다.
소프트웨어를 출시할 때 컴파일을 하는 과정이 필요없기 때문에 코드 수정이 잦은 서비스의 경우 업데이트가 훨씬 수월하지만 실행 속도는 컴파일러 언어에 비해 느리다는 단점이 있다.
그리고 프로그래머가 짠 코드가 그대로 배포되어 사용되기 때문에 프로그래밍 코드가 보다 쉽게 누출되기도 한다. 이런 특성들을 고려해서, 개발자들은 자신이 만들려는 서비스에 적합한 종류의 언어를 선택해서 프로그래밍을 한다.

빌드

윈도우의 .exe파일처럼, 사용자가 바로 실행할 수 있는 파일 하나로 제공하기 위함일 때
프로그래밍 코드들을 압축해서 전체 크기를 줄이거나 다른 사람들이 가능한 코드를 못 알아보도록 난독화하는 경우도 있다.

컴파일 언어의 경우 당연히 컴파일을 해서 내보내야한다.

즉, 컴파일 언어로 만드는 소프트웨어는 빌드에 컴파일 작업이 포함되어있는 것이다.

때문에 프로그래밍 언어마다, 그리고 소프트웨어의 종류마다 빌드 결과물의 형태는 다양하다. 파일 하나로 압축되기도 하고, 많은 파일에 걸친 코드들이 더 적은 수의 파일들로 정리되기도 하고 그냥 파일들의 형식과 내용만 바뀌는 경우도 있다.

*정리하면, 작업하는 프로젝트 파일들을 출시하기 적합한 형태로 포장하는 일을 빌드라고 생각하면 된다. *

배포

코딩해서 빌드한 결과물을 사용자에게 전달하는 과정

환경변수

컴퓨터마다 지정된 값

'IT' 카테고리의 다른 글

JVM, JRE, JDK  (0) 2024.06.03
Git & Github  (0) 2024.06.03
가상메모리_3  (0) 2024.06.02
가상메모리_2  (0) 2024.06.01
가상 메모리_1  (1) 2024.06.01

+ Recent posts