전체 글

초보 개발자의 지식 공유의 장
산술 연산자 오버로딩 이항 산술 연산 오버로딩 (+, -, *, /) 함수 앞에 operator 키워드를 붙이면 연산자 오버로딩이 가능하다. data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point) { // plus 이름의 연산자 함수를 정의 return Point(x + other.x, y + other.y) } } val p1 = Point(10, 20) val p2 = Point(30, 40) println(p1 + p2) >> Point(x = 40, y = 60) >> p1 + p2 는 p1.plus(p2)로 컴파일 된다. 미리 정해둔 연산자만 오버로딩 가능 식 함수 a * b times a / b div..
압축 zip -e 압축파일.zip 압축할파일 zip -e attach.zip attach.txt Enter password : 암호를 두 번 입력 (두 번째는 verify) 압축 해제 unzip 압축파일.zip 암호 입력 후 해제
어떠한 문제가 발생하였고, 그 원인을 찾아 헤맬때는 왜 이런 현상이 발생했는지 이해가 되지 않고 막막할 때가 많다. 하지만 문제가 발생한 원인을 생각하면서 차근차근 하나씩 의심가는 부분들을 확인하다보면 의외로 아주 간단하고, 아주 창피하고, 아주 어이없는 실수인 경우가 대부분이다. 오늘은 내가 겪은 창피하면서도 어이없는 실수를 기록해보려 한다. 상황 설명 상황을 아주 디테일하게 설명하진 못하지만, 아래 같은 기능을 갖는 시스템이 있다. A시스템에서 B시스템을 호출하는 API가 있다. B시스템에서는 장애가 자주 나기 때문에, 응답값을 받지 못하는 경우 별도의 Front화면에서 사람이 재시도를 할 수 있는 기능이 있다. Front에서 실패한 API건을 체크하여 재시도 버튼을 클릭하면 B시스템이 제공하는 AP..
코틀린은 원시 타입/래퍼 타입을 구분하지 않는다. Int, Boolean 등등 코틀린은 자바와 달리 원시타입과 래퍼타입이 따로 존재하지 않는다. var list: List = listOf(1, 2, 3) 코틀린에서 모든 타입이 참조 타입으로 표현되는 것이 아니라, 실행 시점에 가능한 가장 효율적인 방식으로 타입이 표현된다. 대부분의 경우 코틀린의 Int타입은 자바 int 타입으로 컴파일 된다. 컴파일이 불가능한 경우(제네릭 클래스)만 래퍼 타입(Integer)로 컴파일되게 된다. Int를 컬렉션의 타입 파라미터로 넘길 때, Integer객체가 들어가게 된다. 널이 될 수 있는 타입 Int?, Boolean? 코틀린에서 널이 될 수 있는 원시 타입을 사용하면, 자바의 래퍼 타입으로 컴파일 된다. 자바의 래..
엘비스 연산자(?:) 코틀린은 엘비스 연산자(?:)를 사용하여 디폴트 값을 편하게 지정할 수 있다. fun foo(s: String?) = s ?: "" fun strLenSafe(s: String?): Int = s?.length ?: 0 return이나 throw등의 연산도 식이니, 엘비스 연산자의 우항에 넣을 수도 있다. fun printlnShippingLabel(person: Person){ val address = person.company?.address ?: throw IllegalArgumentException("No address") with(address){ println(streetAddress) println("$zipCode $city, $country") } } 안전한 캐스트:..
애드센스 수익금을 빼려하니 지급 보류가 걸려있었다. 으잉? 결제 수단을 추가하여 지급액을 받을 정보를 입력 후 수익금을 받을 수 있나보다. 구글링을 조금 해보니 수익금을 받기 위해선 외환을 받을 수 있는 통장이 개설되어 있어야 한다더라. 외화통장 발급 외화통장 애드센스에 등록 이렇게 도전해보도록 하겠다. 1. 신한은행 외화통장 발급 월급통장이 신한은행이기 때문에 신한은행에서 외화통장을 발급해 보겠다. 다행히 쏠(SOL)어플에서 간단히 발행이 가능하다. 통합검색에서 '외화'를 검색하면, 상품몰로 이동하는데 외화 체인지업 예금을 신청해서 외화통장을 만들었다. (신분증 필수니 참고) 발급 완료 2. 외화통장 애드센스 등록 애드센스에 통장 정보를 등록한다. 결제 > 결제 수단 > 결제 수단 추가 > 새 은행 송..
chatGPT센세는 놀랍다. 구글링을 하면서 정보를 습득하고 탐색하는 시간을 획기적으로 줄여준다. 업무에 종종 사용해야겠다. 전표 전표(Voucher)는 회계에서 거래와 관련된 정보를 기록한 문서로, 회계 분개를 작성하기 위해 사용됨(회계 처리) 일반적으로 거래일자, 거래내용, 거래금액, 거래 대상 계정 등의 정보가 포함됨 매출 전표 매출 거래와 관련된 전표로, 매출 발생 시 해당 거래를 기록하기 위해 사용됨 매출 일자, 거래 내용, 거래 금액, 고객 정보 등이 포함됨 수수료 매출전표 수수료와 관련된 매출 거래를 기록하는 전표 ex. 서비스 수수료나 중개 수수료등과 같은 수수료 수입이 발생했을 때, 해당 거래를 기록하는데 사용됨 그렇다면, 전표(Voucher)설명에서 얘기하는 회계 분개란? 회계 분개(分..
핵심 기능과 부가 기능 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능이라 함은 객체가 가지고 있는 비즈니스로직으로 볼 수 있다. 만약 계산을 해주는 Calculator 라는 객체가 있다고 가정하면, Calcualtor의 핵심 기능은 사칙연산 등을 의미한다. 부가 기능은 핵심 기능을 보조하기 위한 기능이다. 단독으로 사용되지 않으며 핵심기능과 함께 사용된다. 예를 들면 메소드 실행 속도를 나타내는 로그, 트랜잭션 기능, 보안 기능 등등이 된다. 핵심 기능에 부가 기능을 추가해보자 @Slf4j public class Calcualtor { public int add(int x, int y) { // 핵심 기능 return x + y; } public int sub(int x,..
2022.10.11 - [프로그래밍 노트/SPRING] - [Spring] 빈 후처리기 (feat. proxy, advisor) Advisor를 bean으로 등록하면, AnnotationAwaareAspectJAutoProxyCreator 빈 후처리기가 Advisor 에 지정된 pointcut 기반으로 proxy를 만들어 줬다. Advisor 를 bean 으로 등록하기 위해 어드바이저를 직접 만들었는데, 스프링은 @Aspect 애노테이션으로 매우 편리하게 어드바이저(포인트 컷 + 어드바이스)생성 기능을 지원한다. Advisor 를 직접 생성하여 bean 으로 등록 @Bean public Advisor advisor() { AspectJExpressionPointcut pointcut = new Aspec..
2022.09.30 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_2 (feat. Advisor) 2022.09.28 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_1 (feat. Advice) 프록시 팩토리는 스프링에서 제공해주는 강력한 기술이지만, 부가기능이 필요할때 마다 프록시팩토리를 사용하여 프록시 객체를 만들기에는 한계가 있다. if, 100개의 프록시 빈을 생성해야한다면? .. 설정파일에 빈들을 하나씩 추가해줘야 한다. 빈 후처리기를 활용하면 컴포넌트 스캔을 통하여 일괄로 빈을 등록할 수 있게 되는데 일단 빈 후처리기에 대해 알아보자. 빈 후처리 - BeanPostProcessor 스프링은 bean 으로 등록될 대상 객체를 찾아서(@Bean 또는 컴포..
깡냉쓰
평범한 개발자 노트