
URL(Uniform Resource Locator): 웹 리소스의 위치를 지정하는 문자열
http, https, ftp.www.example.com.:8080./path/to/resource.?key=value&key2=value2.#section.URL의 일반적인 형식은 다음과 같습니다:
protocol://host:port/path?query#fragment
예제:
https://www.example.com:8080/path/to/resource?key=value#section
파일 경로를 URL로 표시할 때는 파일 프로토콜을 사용
파일 URL은 로컬 파일 시스템 내의 파일 위치를 지정
file:///path/to/file
file:///home/user/file.txtfile:///C:/Users/username/file.txtUnix 스타일 경로는 슬래시(/)를 구분자로 사용합니다. 절대 경로는 루트 디렉토리(/)에서 시작하며, 상대 경로는 현재 디렉토리에서 시작합니다.

Windows 스타일 경로는 백슬래시(\)를 구분자로 사용합니다. 절대 경로는 드라이브 문자로 시작하며, 상대 경로는 현재 디렉토리에서 시작합니다.
[abc]는 a, b, c 중 하나의 문자와 매칭됩니다.[a-z]는 a부터 z까지의 모든 소문자와 매칭됩니다.*는 0회 이상, +는 1회 이상, ?는 0회 또는 1회를 나타냅니다.()를 사용하여 부분 문자열을 그룹화할 수 있습니다.^는 문자열의 시작, $는 문자열의 끝을 나타냅니다.Kotlin에서 정규 표현식을 생성하려면 Regex 클래스를 사용합니다. 패턴 문자열을 Regex 객체로 변환하여 사용합니다.
val regex = Regex("[a-zA-Z]+")
정규 표현식을 사용하여 문자열에서 특정 패턴을 검색할 수 있습니다. find 메서드는 첫 번째 매칭 결과를 반환합니다.
val matchResult = regex.find("Kotlin123")
println(matchResult?.value) // Output: Kotlin
findAll 메서드는 문자열 내의 모든 매칭 결과를 시퀀스로 반환합니다.
val matches = regex.findAll("Kotlin123 and Java456")
matches.forEach { match ->
println(match.value)
}
// Output:
// Kotlin
// Java
replace 메서드는 매칭된 부분을 다른 문자열로 대체합니다.
val result = regex.replace("Kotlin123 and Java456", "Language")
println(result) // Output: Language123 and Language456
split 메서드는 정규 표현식을 기준으로 문자열을 분리합니다.
val result = regex.split("Kotlin123 and Java456")
result.forEach { part ->
println(part)
}
// Output:
// (빈 문자열)
// 123 and
// 456
val emailRegex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")
val email = "test@example.com"
println(emailRegex.matches(email)) // Output: true
val phoneRegex = Regex("(\\d{3})(\\d{3})(\\d{4})")
val phone = "1234567890"
val formattedPhone = phoneRegex.replace(phone, "$1-$2-$3")
println(formattedPhone) // Output: 123-456-7890
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculatorTest {
private Calculator calculator;
@Before
public void setUp() {
calculator = new Calculator();
}
@Test
public void testAdd() {
assertEquals(5, calculator.add(2, 3));
}
@Test
public void testSubtract() {
assertEquals(1, calculator.subtract(3, 2));
}
}
여러 테스트 클래스를 그룹화하여 한 번에 실행할 수 있습니다.
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
CalculatorTest.class,
AnotherTest.class
})
public class TestSuite {
// 이 클래스는 빈 클래스로 유지하며, 어노테이션을 통해 테스트 수트를 구성합니다.
}
특정 메서드가 예외를 던지는지 확인할 수 있습니다.
import org.junit.Test;
import static org.junit.Assert.assertThrows;
public class ExceptionTest {
@Test
public void testException() {
assertThrows(IllegalArgumentException.class, () -> {
throw new IllegalArgumentException("Invalid argument");
});
}
}
특정 메서드가 지정된 시간 내에 실행되는지 확인할 수 있습니다.
import org.junit.Test;
import static org.junit.Assert.assertTimeout;
import java.time.Duration;
public class TimeoutTest {
@Test
public void testTimeout() {
assertTimeout(Duration.ofMillis(100), () -> {
// 실행 시간이 100ms를 넘지 않아야 하는 코드
});
}
}
Kotest는 Kotlin을 위한 강력한 테스트 프레임워크로, BDD와 TDD 스타일을 모두 지원합니다. 풍부한 DSL을 제공하여 읽기 쉽고 작성하기 쉬운 테스트 코드를 작성할 수 있습니다.
import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe
class ExampleTest : StringSpec({
"value should be 5" {
val value = 5
value shouldBe 5
}
})

단위 테스트는 소프트웨어의 가장 작은 단위(일반적으로 함수나 메서드)를 테스트하는 것입니다.
통합 테스트는 개별 단위가 결합된 후, 모듈 간의 인터페이스와 상호 작용을 테스트하는 것입니다.
단위 테스트로 검증된 각 모듈이 함께 잘 작동하는지 확인합니다.
시스템 테스트는 완전한 소프트웨어 시스템을 대상으로 하여, 요구사항이 충족되는지 확인하는 테스트입니다.
인수 테스트는 최종 사용자의 관점에서 시스템의 요구사항이 충족되는지 확인하는 테스트입니다.
주로 비즈니스 요구사항을 기반으로 작성되며, 사용자 스토리나 시나리오를 중심으로 진행됩니다.
