언어
-
__init__.py 톺아보기언어/파이썬 2023. 8. 12. 20:56
들어가기 전에 파이썬으로 작업할 때 종종 __init__.py 를 볼 때가 있습니다. 어떤 역할을 하는 것 인지 유추하기 위해 파일을 클릭해봐도 빈 파일이거나 알 수 없는 __all__ = ['이상한', '문자열'] 등이 있거나 from .module import SomeClass 와 같이 알 수 없는 import 를 하는 코드만 나와있습니다. 어떤 역할을 하는 것인지 알 수 없어 __init__.py 의 역할을 톺아보는 시간을 이번 포스팅에서 갖겠습니다. __init__.py 를 왜 사용할까? 디렉토리를 패키지로 인식 시키기 위해 많은 글들을 보면 __init__.py 를 사용하므로써 파이썬에게 디렉토리가 패키지임을 알려주는 파일이라고 합니다. 하지만 이런 설명은 패키지와 디렉토리와 같은 개념을 알아야..
-
Mockk(relaxed = true) 는?언어/Kotlin 2023. 3. 13. 23:00
테스트 코드를 짜다보면 특정 클래스의 메서드가 특정 방식이 반환되기를 기대할 때 종종 Mock을 이용해 테스트를 짭니다. 언어마다 여러가지 목킹 도구들이 있고, 그중 코틀린은 Mockk 가 주로 사용됩니다. 코틀린의 테스트 코드를 보면 모킹을 다룰 때 mockk(relaxed = true) 로 되어있는것을 볼 수 있습니다. relaxed = true 를 파라미터로 줄 때와 그렇지 않을 때의 사용방법이 어떻게 다른지 비교해보겠습니다. relaxed = true // Member.kt @Entity class Member( @Column(name = "name") val name: String, ) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) pri..
-
Kotlin safe call언어/Kotlin 2022. 11. 29. 23:15
kotlin 에서는 java 와 다르게 null이 될 수 있는 타입과 null이 될 수 없는 타입을 완벽히 구분합니다. null 이 될 수 있는 타입은 일반 타입처럼 쓰고 (Int, String) null 이 될 수 있는 타입은 타입뒤에 물음표를 붙입니다. 만약 null 이 될 수 있는 타입을 호출한다면 어떻게 해야할까요? 이를 무시하고 그냥 호출한다면 NullPointerException 이 발생할 것입니다. 따라서 자바는 이때 if 를 사용해 null 을 방지합니다. public void printStringLength(String str) { if (str != null) { System.out.println("length of str is " + str.length) } else { System...
-
Kotlin 에 대해서 알게 된 것들언어/Kotlin 2022. 10. 11. 22:16
TL;DR 코틀린을 사용하면서 알게된 것을 적어놓습니다. 1. 함수이름에 `(백틱)을 사용하면 함수 이름에 스페이스( ), 괄호( 등을 사용할 수 있습니다. fun `create User (when user doesn't exist)` { //... logic } 실제 사용하는 메서드에서 이렇게 쓰는건 권장되지 않습니다. 메서드를 호출할 때 오히려 가독성 면에서 좋지 않을 수 있습니다. 하지만 테스트 코드를 짤 때는 해당 함수를 호출하는 용도가 아닌 테스트 코드 함수명으로 사용한다면 가독성을 높일 수 있습니다.
-
Java 의 Final 키워드언어/자바 2022. 5. 10. 21:08
개요 상속을 통해 기존 코드를 재사용할 수 있지만 때때로 다양한 이유로 확장성에 제한을 설정해야 합니다. final 키워드를 사용하면 정확히 그렇게 할 수 있습니다. Final Classes final 로 선언된 클래스는 상속될 수 없습니다. Java 핵심 라이브러리의 코드를 보면 많은 final 클래스들을 볼 수 있습니다. 대표적인 예시로는 String 클래스가 있습니다. 아래의 코드를 살펴보면 Cat 클래스는 final 로 선언되어 있고 이 클래스를 BlackCat 이 상속받고 있습니다. 그 결과 final 클래스인 Cat 을 상속받았다는 컴파일 에러가 발생한 것을 확인할 수 있습니다. @Getter @Setter public final class Cat { private int wieght; } p..
-
인터페이스언어/자바 2022. 5. 4. 22:51
인터페이스란? 인터페이스는 클래스의 청사진으로 볼 수 있는 기능이며 클래스에게 인터페이스 내에 있는 메서드들을 구현하도록 강제합니다. 언제 인터페이스를 사용해야 할까? 추상화 사용하려고 할 때 사용됩니다. 다형성을 위해 사용됩니다. public interface Shape { String name(); } public class Circle implements Shape { @Override public String name() { return "Circle"; } } public class Square implements Shape { @Override public String name() { return "Square"; } } List shapes = new ArrayList();..
-
Variable Scope언어/파이썬 2021. 1. 30. 14:48
파이썬에서 변수의 scope에 대해서 궁금한게 계속 쌓인 상태였다. 이번기회에 확실히 정리 하는게 좋을 것 같다고 생각하여 정리 하고자 한다. 스코핑 룰 변수의 생존범위에 관련도니 규칙이다. 파이썬에서의 함수는 별도의 namespace를 가지며, 이 namespace라는 것은 말 그대로 이름이 모여있는 공간을 의미한다. 예를 들어서 변수를 선언하면 그 변수의 이름이 namespace에 생성된다. 파이썬에서 변수명을 가지고 값을 얻어낼 수 있던 것은 사실 이름공간에 있는 이름을 가지고 특정 객체에 접근하여 얻어오는 것이었다. namespace는 위처럼 총 3가지의 공간으로 나뉜다. 함수 내부의 공간은 지역(local) 영역이라 하고, 함수 외부의 공간은 전역(Global) 영역이라고 하고, 파이썬 자체에서..