언어

    코틀린 default 생성자 만들기

    코틀린 default 생성자 만들기

    개요 코틀린으로 Spring boot를 다루다보면, 기존 자바로 되어있는 프레임워크 로직이 가끔씩 에러를 일으킨다. FlatFileItemReader를 사용하려다가 에러가 났는데, Target class를 Data class로 잡아놨었다. Bean 생성에 대한 에러 메시지였는데.. FlatFileItemReader의 다음과 같은 특성때문이었다. 1. FlatFileItemReader는 Target Class의 인스턴스를 Default 생성자를 통해 생성한다. 2. 후에 파일을 파싱하여 인스턴스의 필드의 setter를 이용해 값을 주입한다. 따라서 코틀린으로 해당 Target Class를 만드려면 Default 생성자와 Setter를 만들어줘야 하는것이다. 해결 코틀린은 변수를 val로 선언하기를 권장한다..

    참조(Reference) vs 포인터

    참조와 포인터는 똑같다. C++에는 참조와 포인터가 있는데, 이 둘은 표현 방식이 다르지만 내부 동작은 똑같다. 다른 점은 ? 참조가 포인터보다 사용하기 편하다. 만약 함수의 인자로 포인터를 받기로 했다면 어떤 변수의 주소를 받았을텐데.. 이 변수를 사용하려면 *을 붙이는 등 귀찮다. 하지만 참조는 그냥 실제 변수처럼 사용하면 된다. 다만, 이 점때문에 포인터는 확실하게 원본을 넘긴다는 힌트를 줄 수 있는데, 참조는 놓칠 수 있다. (가독성 문제) 결론 정해진 답은 없다.. 스스로 컨벤션을 정하거나 팀과 컨벤션을 정하여 참조 or 포인터 사용을 정하는 것이 정답...~

    고루틴(goroutine)은 무조건 빠를까?

    goroutine 고루틴은 go에서 제공하는 기능으로 go 키워드를 이용해 쉽게 병렬 처리를 가능하게 하는 기법이다. 나는 고루틴을 쓰면 쓰지 않은 것보다 항상 빠를 것이라고 생각했다. 결론적으론 고루틴을 사용한 코드가 사용하지 않은 코드보다 더 느렸는데, 더 느린 이유가 궁금해서 검색하다가 다음 글을 찾았다. https://appliedgo.net/concurrencyslower/ Slow down your code with goroutines - Applied Go Concurrent code can be slower than its serial counterpart due to CPU cache synchronization appliedgo.net 내가 했던 방식처럼 하나의 슬라이스를 여러 CPU ..

    외박 신청 어플 API 리팩토링

    좀 더 나은 성능으로 이전에 고루틴을 활용해 외박 신청에 실패한 글을 작성하였다. 그래서 사실 API 코드를 리팩토링 하는 것은 포기하고 있었으나 문득 그런 생각이 들었다. 다른 부분에서 고루틴을 활용(파싱이라던가)하면 되지 않을까? 만약 안되면 고루틴이 아니더라도 Go가 js보다 빠르지 않을까? 따라서 리팩토링을 진행해보기로 했다. 결과는 잘 완료돼서 현재 Lambda에 배포하였다. https://github.com/AUTO-Overnight/Auto_Overnight_API GitHub - AUTO-Overnight/Auto_Overnight_API: 학교 외박신청 자동화 App이 사용하는 API 학교 외박신청 자동화 App이 사용하는 API. Contribute to AUTO-Overnight/Au..

    고루틴을 이용해서 외박 신청 해보기

    고루틴을 이용해서 외박 신청 해보기

    문득 든 생각 https://smgthings.tistory.com/10?category=965902 학교 외박 신청 어플 제작 후기 : serverless를 이용한 aws lambda backend 우리 학교 외박 신청은 절차도 복잡하고 인터페이스도 사용자 친화적이지 않아서 학생들의 원성이 높다. (물론 나를 포함) 그래서 가끔 이런 외박 신청을 쉽게 해주는 어플이 만들어지기를 기대 smgthings.tistory.com 나는 학교 외박 신청 어플의 API를 만들어서 운영하고 있다. 사실 조금 아쉬운 점이 존재했는데 바로 한 달 외박 신청이 조금 느리다는 것이다. 느린 이유는 28개의 외박 신청을 하나하나 http requests 보내기 때문이다. 바로 이 부분인데, xml을 만들고 axios post..

    java [8] java.lang패키지와 유용한 클래스

    java [8] java.lang패키지와 유용한 클래스

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 java.lang java.lang패키지는 자바 프로그래밍에 기본이 되는 클래스들을 포함하고 있다. 따라서 따로 import하지 않아도 사용할 수 있게 되어 있다. Object 클래스 Object클래스는 모든 클래스의 최고 조상이다. 그렇기 때문에 이 클래스에 속한 멤버들은 모든 클래스에서 바로 사용가능하다. equals(Object obj) 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean으로 알려 주는 역할을 한다. 이 메서드는 두 객체의 같고 다름을 참조변수의 값으로 판단한다. 따라서 서로 다른 두 객체를 비교하면 항상 false를 결과로 얻게 된다. 따라서, 만약 인스턴스가 가지고 있는 value값들을 비교하고 싶을..

    java [7] Collections-2

    java [7] Collections-2

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 Arrays Arrays클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다. 배열의 복사 - copyOf(), copyOfRange() 배열 채우기 - fill(), setAll() 배열의 정렬과 탐색 - sort(), binarySearch() 배열의 비교와 출력 - equals(), toString() 배열을 List로 변환 - asList(Object... a) Comparator와 Comparable Comparator와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. 예를 들어, Arrays.sort()에서는 Character클래스의 Comparable의 구현에 의해 정렬된다. Comp..

    java [7] Collections-1

    java [7] Collections-1

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 Collections Framework 컬렉션 프레임워크는 데이터들을 저장하는 클래스들을 표준화한 설계를 뜻한다. 컬렉션 프레임워크는 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공하고 있다. JDK1.2 이전까지는 Vector, Hashtable, Properties와 같은 클래스들을 이용해 서로 다른 각자의 방식으로 처리해야 했으나 JDK1.2부터 컬레션 프레임워크가 등장하고 다양한 종류의 컬렉션 클래스가 추가되었고, 모든 클련 클래스를 표준화된 방식으로 다룰 수 있게 체계화되었다. 컬렉션 프레임워크의 핵심 인터페이스 컬렉션 프레임워크는 크게 3가지 타입이 존재한다고 인식하고 List, Set, Map 인터페이스들로 정의..

    java [6] 예외처리

    java [6] 예외처리

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 프로그램 오류 프로그램이 실행 중에 어떤 원인에 의해서 오작동 하거나 비정상적으로 종료되는 경우가 있다. 이것을 프로그램의 오류 또는 에러라고 하는데, 그것들의 종류에는 세 가지가 있다. 1. 컴파일 에러 : 컴파일 시에 발생하는 에러 2. 런타임 에러 : 실행 시에 발생하는 에러 3. 논리적 에러 : 실행은 하지만 의도와 다르게 동작하는 것 또 여기서, 자바에서 런타임 에러는 두 가지 종류가 있다. 에러 - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 - 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 에러가 발생하면 프로그램의 종료를 막을 수 없지만 예외가 발생하면 프로그래머가 적절한 코드를 작성해놓았다면 프로그램의 ..

    java [5] 객체지향 프로그래밍-3

    java [5] 객체지향 프로그래밍-3

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 추상 클래스 클래스가 설계도라면 추상 클래스는 미완성 설계도이다. 추상 클래스는 미완성 메서드를 포함하고 있다. 추상 클래스는 인스턴스를 생성하지 못하며, 상속을 통해 자손 클래스를 통해서만 완성될 수 있다. 추상클래스는 클래스 선언 앞에 abstract 키워드를 붙이면 된다. 참고로, 추상 메서드를 포함하고 있지 않은 클래스에도 abstract를 붙여 추상 클래스로 만들 수 있다. 추상 클래스로 지정되면 추상 메서드가 없어도 인스턴스 생성이 불가능해진다. 추상 메서드 설계만 해놓고 실제 수행될 내용을 작성하지 않은 것을 추상 메서드라고 한다. 메서드를 미완성으로 남겨 놓는 이유는, 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문..