전체 글

전체 글

    [Android] Shape에 margin 속성 추가하기

    외부 라이브러리를 사용하는 과정에서 화면에서 보일 TextView를 인자로 넘겨주는 경우가 생겼다. 설상가상으로 TextView 자체의 디자인도 복잡하고 margin 값 적용이 필요한 경우였는데, WindowManager.LayoutParams만 layoutparams로만 정의해야 하는 제약까지 있었다. 만약 LinearLayout이나 RelativeLayout으로도 layoutParams 정의가 가능하면 아래처럼 쉽게 끝낼 수 있다. layoutParams = LinearLayout.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT ).apply { setMargins(1,2,3,4)..

    [Android] 디바이스 화면 해상도 구하기

    fun getDeviceMetric(): ScreenSizeInfo = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { val displaySize = Point() context.getSystemService(WindowManager::class.java).defaultDisplay?.getRealSize(displaySize) ScreenSizeInfo( screenWidth = displaySize.x, screenHeight = displaySize.y ) } else { val metrics = context.getSystemService(WindowManager::class.java).maximumWindowMetrics ScreenSizeInfo..

    [Kotlin] Object

    때때로 새로운 클래스를 명시적으로 선언하지 않고 클래스를 조금 변경된 객체를 만들 필요가 있다. Kotlin은 이런 케이스를 해결하기 위해 Object 식(expression)과 Object선언(declaration)을 지원한다. Object 식 특정 타입을 상속받는 inner 클래스 객체를 만들 때는 다음과 같이 작성한다. window.addMouserListener(object: MouseAdapter()){ override fun mouseClicked(e: MouseEvent){ //... } overrid fun mouseEntered(e: MouseEvent){ //... } }) 상위 타입이 복수라면 콜론 뒤에 콤마로 구분한다. open class A(x: Int) { public open ..

    [Kotlin] Delegated Properties

    일반적으로 프로퍼티는 필요할 때마다 수동으로 구현할 수 있지만, 한 번 구현한 후 필요할 때마다 재사용하는 것이 더 유용하다. 대상은 다음과 같다. Lazy 속성: 최초 접근시에만 값을 계산. Observable 속성: 이 속성의 변경사항을 리스너로 알림. 별도의 필드가 아닌 맵에 속성을 저장. 이 경우들을 처리하기 위해 Kotlin은 Delegated Properties를 지원한다. class Example{ var p: String by Delegate() } 형태는 val/var : by 이다. by 뒤에 붙은 expression이 대리자(delegate)이며, 프로퍼티에 대한 get() / set()을 대리자 getValue() / setValue() 메소드에 위임한다. 프로퍼티 대리자는 인터페이..

    [Kotlin] Delegation

    Delegation 패턴은 상속 처리의 좋은 대안으로, Kotlin은 네이티브 코드에 보일러 플레이트 코드가 필요 없는 이 패턴을 지원한다. 아래 코드에서 클래스 Derived는 인터페이스 Base로부터 상속받아 모든 퍼블릭 메소드를 지정된 객체에 위임 가능하다. interface Base{ fun print() } class BaseImpl(val x: Int): Base{ override fun print() { print(x) } } class Derived(b: Base): Base by b fun main(){ val b = BaseImpl(10) Derived(b).print() } //result: 10 Derived의 상위 타입 목록에 있는 by는 Derived의 객체 내부에 b가 저장되고..

    [Java] 예외 종류

    Java에서 예외는 Error, RuntimeException, OtherException 3가지 종류로 나뉜다. 먼저 Error는 메모리 부족(OutOfMemoryError), 스택오버플로우(StackOverFlowError)등 JVM 또는 하드웨어적인 시스템의 문제로 발생하는 것을 의미한다. 다시 말해 개발자의 영역이 아님 시스템 영역의 문제이기 때문에 Error가 발생하면 프로그램을 종료시키는 것이 통상적이다. 다음으로는 큰 분류로 Exception이다. Error와 Exception의 가장 큰 차이점은 개발자가 프로그램적으로 처리할 수 있느냐 없느냐의 차이이다. 즉, 예외가 발생하더라도 프로그램이 비정상 종료되는 일을 막을 수 있다. Exception은 RuntiException과 OtherExc..