728x90

Kotlin 15

Error getting access token for service account 오류 해결

원인 : 스프링 부트 스케쥴러와 트랙잭션을 따로 동작시키면 Error getting access token for service account 오류가 발생 @Service @Transactional class NotiService { private val pushInfoJpaRepo: PushInfoJpaRepo, ) { val log = KotlinLogging.logger {} fun sendPush(repeatedPushResults: List?) { val pushReservedInfo = PushReservedInfo() if (repeatedPushResults != null) { for (repeatedPushResult in repeatedPushResults) { if (userNtcnS..

FCM 2023.10.12

(코틀린 버전) 안드로이드 푸시알림 spring boot 서버 개발

파이어베이스는 2011년 파이어베이스사가 개발하고 2014년 구글에 인수된 모바일 및 웹 애플리케이션 개발 플랫폼 구글 드라이브와 애널리틱스를 적용해서 어떤 기기에서나 개발할 수 있는 환경을 만들어 주고, 사용자들의 이용횟수, 광고 효과, 문제 발생 빈도 등을 알려줘서 개발자들이 쉽게 활용할 수 있도록 지원 파이어 베이스의 인증 기능을 이용한 SSO(통합 인증)을 지원하는 서비스를 통해 사용자는 로그인을 활동을 쉽게 할 수 있음 파이어베이스는 NoSql 클라우드 데이터베이스에 JSON 형태로 데이터를 저장하고 클라이언트에 실시간으로 동기화 파이어베이스는 HTML , CSS, 자바스크립트 등과 같은 정적 콘텐츠를 빠르고 안전하게 호스팅해줍니다. 또한 SSL을 제공하기 때문에 안전하게 컨텐츠를 전송 컨트롤러..

(코틀린) 람다함수와 고차함수

Lambda 함수 함수의 이름이 없는 익명함수(anonymous function)이라고 합니다. {매개변수 → 실행 코드(몸체)} 위 함수의 구조와 같이 람다(익명)함수는 중괄호 내에 실행문을 입력합니다. 다음은 간단한 예로 문자열을 출력하는 함수입니다. 이 함수를 실행하기 위해서는 함수다음에 인수를 전달하기 위한 ()를 같이 나타내야 합니다. 다음은 전달하는 인수가 별도로 존재하지 않는 경우입니다. {println("Hello")}() // 결과: Hello 람다함수 역시 개체이므로 변수에 저장할 수 있습니다. 이 경우 변수명은 함수이름과 같은 역할을 합니다. 그러므로 객체를 호출할 경우 함수와 같이 적용해야 합니다. 즉, 변수명() val swim={println("swim \n")} swim() /..

(코틀린) 데이터 클래스와 컴패니언 클래스

데이터 클래스 데이터 클래스는 data 키워드로 선언하며 자주 사용하는 데이터를 객체로 묶어 준다. 또한, VO 클래스를 편리하게 이용할 수 있게 해준다. class NonDataClass(val name: String, val email: String, val age: Int) data class DataClass(val name: String, val email: String, val age: Int) fun main(){ val non1 = NonDataClass("kuka", "a@a.com", 10) val non2 = NonDataClass("kuka", "a@a.com", 10) val data1 = DataClass("kuka", "a@a.com", 10) val data2 = DataCl..

(코틀린) 상속과 오버라이딩

클래스 상속 형식 open class Super {// 상속할 수 있게 open 키워드 이용 } class Sub: Super() {// Super를 상속받아 Sub 클래스 선언 } 참고) 매개변수가 있는 상위 클래스의 생성자 호출 open class Super(name: String){ } class Sub(name: String): Super(name){ } 오버라이딩 예시 open class Super { open var someData = 10 open fun someFun(){ println("i am super class function : $someData") } } class Sub: Super(){ override var someData = 20 override fun someFun(){..

(코틀린) 주 생성자와 보조 생성자

주 생성자와 보조 생성자는 모두 클래스의 생성자이다. 따라서, 객체를 생성할 때 호출되는 건 똑같다. 그리고 클래스 안에 주 생성자만 선언하든, 보조 생성자만 선언하든 그것은 개발자 마음이다. 단지, 주 생성자와 보조 생성자를 모두 선언할 경우 보조 생성자로 객체를 생성할 때에는 반드시 주 생성자가 실행되게 만들어야 한다는 규칙이 있다. 이러한 규칙은 필수 매개변수와 실행 구문을 주 생성자에 작성하고 보조 생성자가 실행될 때 주 생성자도 함께 실행되게 하려는 의도이다. 결국 객체를 여러 가지 형태로 생성할 수 있도록 생성자의 매개변수를 다양하게 구성할 때 생성자의 공통된 코드는 주 생성자에 작성하라는 의미로 이해할 수 있다. class User(name: String){ constructor(name: ..

코틀린 널 안정성 연산자

fun main() { var data: String? = null println("data length : ${data?.length ?: 0}") } 위 소스는 data가 null이면 0을 반환하고 null이 아니면 length를 이용해 문자열의 개수를 얻는 소느 null 점검 코드를 작성하지 않았는데도 널 안정성을 확보 엘비스 - ?: 연산자 엘비스 연산자란 ?: 기호를 말한다. 이 연산자는 변수가 널이면 널을 반환한다. 변수가 널일 때 대입해야 하는 값이나 실행해야 하는 구문이 있을 때, 엘비스 연산자를 이용한다. fun main() { var data: String? = "kuka" println("data = $data : ${data?.length ?: -1}") data = null pri..

(코틀린) 고차 함수

고차 함수(high order fuction)란 함수를 매개변수로 전달받거나 반환하는 함수를 의미합니다. 일반적으로 함수의 매개변수나 반환값은 데이터입니다. 그런데 데이터가 아닌 함수를 매개변수나 반환값으로 이용하는 함수를 고차 함수라 합니다. 이처럼 함수를 매개변수나 반환값으로 이용할 수 있는 것은 앞에서 살펴보았듯이 함수를 변수에 대입할 수 있기 떄문입니다. 다음 코드에서 hofFun()은 고차 함수입니다. 매개변수를 하나 선언했지만 타입이 함수입니다. 따라서 이 함수를 호출하려면 인자로 함수를 전달해야 합니다. 또한, 반환 타입 역시 함수이므로 호출 결과로 함수를 반환받습니다. fun hofFun(arg: (Int) -> Boolean): () -> String { val result = if(ar..

(코틀린) 람다 함수의 반환

람다 함수도 함수이므로 자신을 호출한 곳에 결괏값을 반환해야 할 때가 있다. 람다 함수에서는 return 문을 사용할 수 없다. val some = {no1: Int, no2, Int -> return no1 * no 2} //오류 대신 람다 함수의 반환값은 본문에서 마지막 줄의 실행 결과이다. fun main() { val some= {no1: Int, no2: Int -> println("in lambda function") no1 * no2 } println("result : ${some(10, 20)}") }

728x90