Exception classes 코틀린에서 모든 예외 클래스는 Throwable 클래스를 상속받고 있습니다. 모든 예외 클래스는 메시지, 스택 트레이스, optional cause를 가지고 있습니다. 예외 객체를 던지기 위해서는 throw 식을 사용합니다. fun main() { throw Exception("Hi There!") } 위 코드를 실행시키면 아래와 같이 예외가 발생됩니다. Hi There이라는 메시지를 주고, 어느 위치에서 오류가 발생했는지 스택 트레이스를 보여줍니다. Exception in thread "main" java.lang.Exception: Hi There! at FileKt.main (File.kt:2) at FileKt.main (File.kt:-1) at jdk.inter..
코틀린과 자바의 대표적인 차이점이 몇 가지 있는데 그중 Null Safety에 대해서 기록. Java와 같은 여러 언어들은 기본적으로 객체에 Null 값을 허용해 줍니다. 그렇기 때문에 Null 객체를 호출해서 사용을 하려고 하고, 이때 null 참조 예외 ( == NullPointerException == NPE )가 발생합니다. 정말,, 많이 본 오류 ^^,, 그래서 코틀린은 객체가 기본적으로 Null을 허용하지 않도록 해서 NPE 오류를 없애려고 합니다. 하지만 기본 값이 Non-Null이지 Nullable로 객체를 선언할 수 있습니다. Non-Null, Nullable 객체 선언 var a: String = "abc" // 기본적으로 a 변수를 선언하고 값을 할당하는 경우 Null이 아님을 의미 ..
@Resource, @Autowired, @Inject 이 어노테이션들은 JAVA를 이용해서 개발을 해봤다면 한번쯤은 봤을 어노테이션들입니다. 3가지 다 의존 객체를 자동으로 주입할 때 사용한다는 공통점이 있습니다. 그럼 차이점은 무엇일까요? 바로 서로 의존 객체를 찾는 방식이 다르고, 사용환경이 다릅니다. 1. @Resource @Resource는 자바에서 제공해주는 어노테이션으로 특정 프레임 워크에 종속적이지 않습니다. 이름 → 타입 → @Qualifier 순서로 객체를 찾습니다. 못찾을 경우 @Resource(name='test') 와 같이 name 속성을 이용해서 의존 객체를 찾습니다. 멤버변수, setter메소드에 사용합니다. 2. @Autowired @Autowired는 스프링 프레임워크에서 ..
람다 표현식이란? JAVA8에서 나온 대표적인 새로운 기능으로, 함수형 프로그래밍에서 사용 가능한 이름이 없는 익명 함수 입니다. 이전 JAVA버전에서 할 수 없었던 일을 할 수 있도록 만들지는 않지만 동적 파라미터등을 이용할 때 코드를 간결하게 작성함으로써 유연한 코드 작성이 가능합니다. 람다 특징 익명성 : 보통 메서드와 다르게 이름이 없는 익명 표현식 함수형 : 특정 클래스에 종속되지 않는 '함수' 지만, 보통 메서드처럼 파라미터, 바디, 반환형식, 예외 리스트를 포함 전달 : 람다 표현식을 파라미터나 변수로 저장 가능 간결성 : 익명 클래스처럼 잡다한 코드를 작성할 필요가 없음 람다 구성 (Sample a, Sample b) -> a.getSize().compareTo(b.getSize()); 위..
컴퓨터는 0, 1 과 같은 이진수(기계어)만 이해하는 기계라는건 모두가 알고 있다. 그런데 우리는 eclipse, vs code, IntelliJ 등을 이용해서 java, js, python 등의 코드를 작성하고 이것으로 컴퓨터를 동작시킨다. 이 고급언어를 컴퓨터가 이해할 수 있는 기계어로 번역해주는게 바로 컴파일러와 인터프리터다. 컴파일러와 인터프리터는 언어를 다른 언어로 번역해주는 프로그램이라는 점이 동일하다. 그럼 차이점은 무엇일까? 1. 컴파일러 (Compiler) 코드의 전체를 한번에 기계어로 번역한다. 모든 코드를 한번에 번역하기 때문에 처음에는 시간이 오래걸리지만 한번 번역해 놓으면 바이너리 파일이 생성되어 메모리에 저장되기 때문에 사용하는 메모리는 많지만, 실행시에 번역하는 시간이 적어 수..
알고리즘을 풀던 중 == 와 equals 때문에 한참을 헤맸던 적이 있다. 분명 같은건 줄 알았는데.. 이제 알면 됐다.. == 와 equals 의 차이점을 정리하기 전에 CBV와 CBR에 대해 정리해보자. 1. CBV vs CBR CBV ( Call By Value ) : 값에 의한 호출 이라는 뜻으로, 함수를 호출하면 그 변수를 그대로 전하는게 아니라 변수를 복사해서 전달하기 때문에 원본 변수에는 변화가 없습니다. CBR ( Call By Reference ) : 참조에 의한 호출 이라는 뜻으로, 함수를 호출하면 그 변수의 주소값이을 복사하여 전달하므로, 원본에 접근이 가능합니다. 많은 예제들을 보면 알겠지만 CBV에 대한 예제는 java로 구현이 가능하지만, CBR에 대한 예제는 포인터 등을 사용하..
기본적으로 JPA에서 Insert, Update, Delete 기능을 하는 Native query를 쓸때는 아래와 같이 작성한다. @Repository public interface TestRepository extends JpaRepository{ @Modifying @Transactional @Query(value="INSERT INTO sample VALUES(username = :username,useremail = :useremail)".nativeQuery=true) public int insertQuery(@Param("username") username, @Param("useremail") useremail); } JpaRepository에 들어있는 TestEntity 에는 username..
Mock 이란 ? 단위 테스트를 진행할때 실제 객체를 만들어서 사용하게 되면 의존성이 높아져 간단한 구현이 아닌 복잡한 구현을 하게 되었을 때 어려움이 있음 이를 해결하기 위해 가짜 객체인 Mock을 사용해서 의존성을 끊고, 보다 간편하게 단위 테스트를 진행 할 수 있다. Mockito 란? JAVA에서 Mock을 사용할 수 있도록 지원해주는 프레임워크 선언 방법 Mock을 사용하지 않고 Repository를 모두 가져와서 사용하는 경우 public class RestaurantServiceTest { private RestaurantRepository restaurantRepository; private RestaurantService restaurantService; private MenuItemRe..