목록Programming/JAVA (11)
우당탕탕 좌충우돌 개발일기
InputStream(입력스트림)과 OutputStream(출력스트림)은 기본 스트림으로 byte 단위로 데이터를 다룬다. FileInputStream / FileOutputStream파일로부터 데이터를 읽기/쓰기 위한 입력/출력용 기본 스트림바이트 단위의 입력/출력을 처리하므로 이미지나 오디오 파일과 같은 이진 파일을 다룰 때 유용하다. InputStream이 추상 클래스는 바이트(Byte) 입력 스트림을 나타내는 모든 클래스의 슈퍼 클래스다.하위 클래스에는 FileInputStream, ByteArrayInputStream이 있음(xxxInputStream 식으로 표현됨) FileInputStream: 기존 파일과 연결된 입력 스트림 객체를 생성 FileInputStream(File fil..
✨ 스프링 빈(Bean)을 등록하는 데는 크게 2가지 방법이 있다. 1. 컴포넌트 스캔(Component Scanning) @Service, @Repository, @Controller 등과 같은 어노테이션을 사용하여 클래스를 빈으로 등록한다. (해당 어노테이션들은 @Component를 포함하고 있음) 이 방법은 클래스에 어노테이션을 붙이면 스프링이 자동으로 해당 클래스를 찾아서 빈으로 등록하는 방식이다. @Service public class MyService { //... } 🍅 여기서 잠깐! @Autowired라는 어노테이션을 사용하려면, 기존 컨트롤러,서비스,레포지토리에도 각각 @Controller,@Service,@Repository 어노테이션을 사용해줘야 한다. 그렇지 않을시 해당 클래스들은 ..
assertThrows는 JUnit 5에서 제공하는 메서드로, 특정 예외가 발생하는지 테스트하는 데 사용된다. 특히 메서드가 예외를 던지는 것을 예상하고, 해당 예외가 실제로 발생하는지 테스트할 때 유용하게 사용되는 특징이 있다. import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertThrows; public class MyServiceTest { @Test public void testDivideByZero() { MyService myService = new MyService(); // 특정 메서드 호출 시 ArithmeticException이 발생하는지 확인 assertThrows(Arithmet..
TestCase는 작성한 각각의 테스트들을 class 단위로 한 번에 테스트 할 수 있다는 장점이 있다. 그러나, 테스트의 순서는 보장되지 않아 한 번에 돌리는 경우 무작위로 테스트 된다는 단점도 공존한다.🤨 (따라서 순서에 의존적으로 설계하면 안됨!) 그래서 테스트가 하나 끝나면 clear해줘야 하는데, 그럴 때 사용하는 것이 바로 AfterEach 어노테이션이다. @AfterEach (AfterEach 어노테이션) : 해당 어노테이션을 사용하면 각각의 테스트 메소드가 실행된 후에 정리 작업이나 공통적인 후처리 작업을 수행할 수 있다. import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.j..
스프링부트 프로젝트를 하면서 테스트 케이스를 작성할 때 사용하는 메서드 중의 하나인 Assertions의 두 가지 버전에 대해 설명하고자 한다. ☝️ Assertions (org.junit.jupiter.api 패키지 제공) : 테스트 케이스를 작성할 때, JUnit과 함께 자주 사용되는 것 중 하나인 Assertion 테스트 결과를 검증하고 예상 값과 실제 값이 일치하는지 확인하는 데 사용된다. import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class MyServiceTest { @Test public void testAddition() { MyService myService = new..
Getter & Setter 📝 예제코드 static class MyClass { private String className; public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } } 예제를 보면 인텔리제이에서 ‘MyClass’라는 클래스를 만들고 Alt + Insert를 클릭하면 Getter and Setter를 선택할 수 있다. Getter and Setter를 선택하면 상단의 소스 코드처럼 Get과 Set이 자동으로 세팅 된다. 이걸 자바 빈(Bean) 규약이라고 하는데, className 같은 경우 private이기 때문에 외..
@ResponseBody (ResponseBody 어노테이션) :HTTP에서 BODY 쪽에 return 데이터를 직접 넣어주겠다는 뜻임 ☝ 예제 @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name) { return "hello " + name; } 만약 @RequestParam(”name”) 여기 부분에 ‘stone’을 넣는다면 return 값은 “hello stone" 이 될 것이다. 그래서 템플릿 엔진과 다르게 해당 문자열을 직접 뷰에 보낸다는 의미이다. (↔템플릿은 뷰 리졸버(View Resolver)에게 ‘나랑 맞는 애를 찾아줘’하고 요청을 던져서 화면에 출력함) ✌ ..
java.util.Optional 클래스 Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다. 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장 가능함 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게된다. (지긋지긋한 null🎃) 💡 Optional 메소드 of() 혹은 ofNullable() 메소드를 사용하여 Optional 객체를 생성할 수 있다. of() : null이 아닌 명시된 값을 가지는 Optional 객체를 반환 만..