728x90

 

Flutter

1) 각 플랫폼 별로 build시 개별적인 툴 사용

- Android: Android Studio, IntelliJ

- iOS: Xcode

- Web: IntelliJ, VSCode

 

2) web의 경우

- 2020년 기준, flutter web은 beta channel로 사용해야함.

- intelliJ가 더 익숙하여 해당 IDE를 사용하여 개발 환경을 구축해 봄.

(1)  Plugin -> Flutter SDK 설치 (Dart도 함께 설치됨)

     Flutter SDK 폴더 안에 dart sdk 폴더가 있으므로 필요시에는 path를 해당 부분으로 연결하면 됨

(2) 앞서 받은 Flutter SDK 폴더를  환경변수에 추가하고, 다음의 명령어 설정

flutter channel beta
flutter upgrade

flutter config --enable-web //web개발기능 활성화

(3) web 개발 기능을 활성화하면 chrome 브라우저 검출이 가능해짐(=안드로이드 앱실행과 같이 Chrome 디버깅 가능)

(4) IntelliJ IDE에서 Flutter New Project 진행 (기존에 생기던 Android, iOS와 더불어 web 폴더가 생김)

(5) 최종적으로 프로젝트 빌드시에는 flutter build web 혹은 flutter run --release 사용

(6) build 후, 프로젝트 내부 build폴더에 web 폴더가 생성됨.

    프로젝트경로/build/web 폴더 내에 있는 파일들을 서버에 올리면 됨.

 

 

 

 

Reference

flutter.dev/docs/get-started/web

zerogyun.dev/2020/02/07/Flutter%EC%97%90%EC%84%9C%20web%EC%9D%84%20%EC%B6%94%EA%B5%AC%ED%95%98%EB%A9%B4%20%EC%95%88%EB%90%98%EB%8A%94%EA%B1%B8%EA%B9%8C/

www.youtube.com/watch?v=htuHNO9JeRU&feature=youtu.be

www.youtube.com/watch?v=E6fLm5XlJDY

www.youtube.com/watch?v=rpkKYQCioW0

 

 

 

 

728x90
728x90

java .lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter errorMessage

 

 

원인: java 파일을 가져다가 Kotlin으로 컨버팅 시켰을때 주로 발생하는 에러. 빌드시 에러 미발생, 런타임에서 발생.
수정: kotlin에 맞게 다시금 override해서 nullCheck관련 설정이 붙은 매개변수로 변경하면 문제 해결됨

 

 

Reference

gogorchg.tistory.com/entry/Kotlin-Parameter-specified-as-nonnull-is-null-method-kotlinjvminternalIntrinsicscheckParameterIsNotNull-parameter-intent

728x90
728x90

javaexpert.tistory.com/503

 

[펌]오라클 OVER() 함수 설명

출처 : http://blog.naver.com/PostView.nhn?blogId=whitefre&logNo=140148769754 ★ OVER()함수란? OVER함수는 ORDER BY, GROUP BY 서브쿼리를 개선하기 위해 나온 함수라고 할 수 있습니다. ★ 전통 SQL 사용 SE..

javaexpert.tistory.com

★ OVER()함수란?

OVER함수는 ORDER BY, GROUP BY 서브쿼리를 개선하기 위해 나온 함수라고 할 수 있습니다.

 

★ 전통 SQL 사용

SELECT YYMM, PRICE
FROM (

SELECT YYMM,

SUM(TOT_PRICE) AS PRICE
FROM TABLE1
GROUP BY YYMM
ORDER BY YYMM DESC

)

 

 OVER 함수 이용

SELECT YYMM,

SUM(TOT_PRICE) OVER(ORDER BY YYMM DESC) AS PRICE
FROM TABLE1

 

 

 COUNT(*)OVER() 사용

실제 데이터와 함께 해당 테이블의 전체 로우 컬럼을 쉽고 편리하게 추출할 수 있다.

 

SELECT MENU_ID, MENU_NAME, COUNT(*) AS TOTALCOUNT
FROM MENU_MG

위의 쿼리를 실행하면 다음과 같은 오류 메시지가 나온다.
ORA-00937: not a single-group group function

 

다음 쿼리로 쉽게 전체 카운트를 추출할 수 있다.

SELECT MENU_ID, MENU_NAME, COUNT(*)OVER() AS TOTALCOUNT
FROM MENU_MG

 

 OVER() 함수

 

COUNT(*)OVER() : 전체행 카운트
COUNT(*)OVER(PARTITION BY 컬럼) : 그룹단위로 나누어 카운트


MAX(컬럼)OVER() : 전체행 중에 최고값
MAX(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 최고값


MIN(컬럼)OVER() : 전체행 중에 최소값
MIN(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 최소값


SUM(컬럼)OVER() : 전체행 합
SUM(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 합


AVG(컬럼)OVER() : 전체행 평균
AVG(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 평균


STDDEV(컬럼)OVER() : 전체행 표준편차
STDDEV(컬럼)OVER(PARTITION BY 컬럼) : 그룹내 표준편차


RATIO_TO_REPORT(컬럼)OVER() : 현재행값/SUM(전체행값) 퍼센테이지로 나타낼경우 100곱하면 됩니다.
RATIO_TO_REPORT(컬럼)OVER(PARTITION BY 컬럼) : 현재행값 / SUM(그룹행값) 퍼센테이지로 나타낼경우 100곱하면 됩니다.

======================================================================

 

COUNT(expr) OVER(analytic_clause)

- 같거나 작은 조건에 대한 갯수 반환

 

/* 부서번호가 50인 부서 지원에 대해 각 직원의 급여보다 같거나 적게 받는 사람에 대한 누적 합을 반환. */

SELECT employee_id, salary

, COUNT(*) over(ORDER BY salary) AS "Count"

FROM employees

WHERE department_id = '50';

 

SUM(expr) OVER(analytic_clause)

-- 같거나 작은 값들에 대한 누적

/* 특정 값을 누적하여 결과를 보여준다. */

SELECT employee_id, salary

, SUM(salary) over(ORDER BY employee_id)

FROM employees

WHERE department_id = '50';

 

/* 위 예제에 더해 부서별 누적 결과를 함께 보고자 한다. */

SELECT employee_id, department_id, salary

, SUM(salary) over(ORDER BY department_id, employee_id)

, SUM(salary) over(partition by department_id order by employee_id)

FROM employees;

 

 

RANK() OVER()

--순위

SELECT SAL_SNO, SAL_YYMM, SAL_TOTAL,

RANK() OVER(ORDER BY SAL_TOTAL) AS "CONT"

FROM TB_SALARY

WHERE SAL_YYMM = '201101';

 

DENSE_RANK 함수

- 값의 그룹에서 값의 순위를 계산합니다. RANK와는 달리 같은 순위가 둘 이상 있어도 다음 순위는 1만 증가하여 반환.

 

SELECT employee_id, department_id, salary

, DENSE_RANK() over(PARTITION BY department_id ORDER BY salary DESC)

FROM employees

WHERE department_id = '50'

 

 

 ROW_NUMBER() OVER- 특정 컬럼 기준으로 순위정하기(행번호 부여하기)

SELECT T.MAIN_CODE
, T.GOODS_SEQ
, T.OFFER_MASTER_SEQ
, MODEL_CD
, (ROW_NUMBER() OVER(PARTITION BY T.MAIN_CODE ORDER BY T.MAIN_CODE, T.GOODS_SEQ, T.OFFER_MASTER_SEQ)) RANK

-- , (ROW_NUMBER() OVER(PARTITION BY 중복조회컬럼 ORDER BY 정렬컬럼1, 정렬컬럼2, ...))
FROM TMP_TABLE T

 

결과

MAIN_CODE GOODS_SEQ OFFER_MASTER_SEQ MODEL_CD RANK

--------------------------------------------------------------

1 1 1 AAA 1

1 1 2 AAA 2

1 2 4 BBB 3

1 2 5 BBB 4

2 1 1 AAA 1

2 1 4 AAA 2

2 2 5 BBB 3

2 2 6 BBB 4

2 3 7 CCC 5

2 3 9 CCC 6

 

 

★ 특정 column의 값을 기준으로 레코드의 순서정하여 정렬하기.

TEAM_CD SCORE PALY_DATE

------------------------------

AAA 90 2010/08/01

AAA 50 2010/08/02

AAA 60 2010/08/03

AAA 50 2010/08/04

BBB 50 2010/08/01

BBB 90 2010/08/02

BBB 95 2010/08/03

BBB 100 2010/08/04

 

방법 1. RANK() OVER

SELECT T.TEAM_CD, T.SCORE, RANK() OVER(ORDER BY SCORE DESC) RANK, T.PLAY_DATE
FROM TMP_TABLE T

 

결과

TEAM_CD SCORE RANK PALY_DATE

------------------------------

BBB 100 1 2010/08/04

BBB 95 2 2010/08/03

AAA 90 3 2010/08/01

BBB 90 3 2010/08/02

AAA 60 5 2010/08/03

AAA 50 6 2010/08/02

AAA 50 6 2010/08/04

BBB 50 6 2010/08/01

 

방법 2. ROW_NUMBER() OVER

SELECT T.TEAM_CD, T.SCORE, ROW_NUMBER() OVER(ORDER BY SCORE DESC) RANK, T.PLAY_DATE
FROM TMP_TABLE T

 

결과

TEAM_CD SCORE RANK PALY_DATE

------------------------------

BBB 100 1 2010/08/04

BBB 95 2 2010/08/03

AAA 90 3 2010/08/01

BBB 90 4 2010/08/02

AAA 60 5 2010/08/03

AAA 50 6 2010/08/02

AAA 50 7 2010/08/04

BBB 50 8 2010/08/01

 

방법 3. DENSE_RANK() OVER

SELECT T.TEAM_CD, T.SCORE, DENSE_RANK() OVER(ORDER BY SCORE DESC) RANK, T.PLAY_DATE
FROM TMP_TABLE T

 

결과

TEAM_CD SCORE RANK PALY_DATE

------------------------------

BBB 100 1 2010/08/04

BBB 95 2 2010/08/03

AAA 90 3 2010/08/01

BBB 90 3 2010/08/02

AAA 60 4 2010/08/03

AAA 50 5 2010/08/02

AAA 50 5 2010/08/04

BBB 50 5 2010/08/01

 

 

 

★ 분석용 함수

RANK - 해당값에 대한 우선순위를 결정 (중복 우선순위 허용)

DENSE_RANK - 해당값에 대한 우선순위를 결정 (중복 우선순위 허용 안함)

ROW_NUMBER - 조건을 만족하는 모든 행의 번호를 제공

CUME_DIST - 분산값

PERCENT_RANK - 백분율

NTILE(n) - 전체 데이터 분포를 n-Buckets으로 나누어 표시

FIRST_VALUE - 정렬된 값중에서 첫번째 값을 반환.

LAST_VALUE - 정렬된 값중에서 마지막 값을 반환.

 

★ OVER() 에 사용되는 OPTION

1. PARTITION BY
2. ORDER BY DESC
3. NULLS FIRST : NULL 데이터를 먼저 출력.
4. NULLS LAST : NULL 데이터를 나중에 출력.

[출처] 오라클 OVER() 함수 |작성자 whitefre

 

 

728x90

'Dev > DB' 카테고리의 다른 글

[MySQL] Linux 언어설정 변경 (LATIN 1 -> EUCKR)  (0) 2020.07.20
[MySQL] 다중 update 쿼리 방법  (0) 2020.07.07
[MySQL] batch작업  (0) 2020.07.02
[MySQL/Oracle] Merge Into 관련 (ON DUPLICATE KEY)  (0) 2020.06.30
[MyBatis] Like 처리 방법  (0) 2020.06.30
728x90

@JvmField
Compiler에게 자동으로 getter/setter를 만들지 말라는 표시

@JvmStatic
Compiler에게 자동으로 static getter/setter를 만들라는 어노테이션, 함수일 경우에는 static 함수가 만들어진다.

companion object {
       @JvmStatic lateinit var instance: PokemonApplication
       @JvmStatic lateinit var appComponent: AppComponent
}


companion object안에서는 사용할 필요가 없다.

자바 코드로 보면 아래와 같다.
@NotNull
public static PokemonApplication instance;
@NotNull
public static AppComponent appComponent;

 

 

[출처] Kotlin 학습 - @JvmField, @JvmStatic|작성자 vicfaith

728x90

+ Recent posts