본문 바로가기
반응형

분류 전체보기362

전개 연산자(Spread Operator) 정리 오늘은 Javascript의 전개연산자(Spread Operator)에 대해서 정리해 보겠습니다. 1. 전개연산자 ...는 전개 연산자(Spread Operator)로 ES6부터 도입되었는데요. 배열이나 객체를 확장해서, 다른 배열이나 객체로 복사하거나 병합할 때 사용합니다. 코드를 더 간결하게 해주고 가독성을 높여줍니다. 1-1. 배열병합 전개연산자를 이용한 배열병합을 잘 이해하도록 도와주는 코드를 보겠습니다. 아래의 arr1과 arr2는 전개 연산자인 '...'을 이용해서, 아래와 같이 conbinedArray라는 병합된 array를 쉽게 만들어 낼 수 있습니다. const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const combinedArray = [...arr.. 2024. 4. 15.
데이터베이스 시간 기록: created_at 과 updated_at 자동 업데이트 하기 SQL문을 이용하면, 데이터베이스의 열이 업데이트 되면, 갱신된 현재의 시간으로 데이터가 바뀌도록 쉽게 할 수 있는데요. 오늘은 이것을 NodeJS과 MySQL을 이용해 구현해 보겠습니다. 1. 데이터베이스 생성 쿼리 먼저 student라는 학생에 관한 데이터를 다루는 테이블을 생성하는 SQL문을 생성하겠습니다. 주의해서 볼 부분이 'created_at'과 'updated_at'인데요. 'DEFAULT CURRENT_TIMESTAMP': 값이 지정되지 않은 경우, 현재 시간이 기본값으로 설정 됨 'ON UPDATE CURRENT_TIMESTAMP': 열을 UPDATE 할 때 해당 열에 현재 시간을 설정함. 특정 열의 값을 업데이트할 때마다 해당 열의 값이 현재 시간으로 자동으로 갱신됨. 'ON UPDAT.. 2024. 4. 13.
Docker 컨테이너 내부의 파일 복사하기: cp 명령어 사용법 오늘은 Docker 컨테이너 내부에서 특정한 파일을 복사하는 방법에 대해서 정리해 보겠습니다. 1. cp 명령어 이용한 복사 Docker에는 이러한 파일 복사를 위한 명령어가 존재합니다. 복사를 하기 위해서는 아래의 사항들을 알고 있어야 합니다. 복사할 파일과 저장할 파일의 위치 컨테이너 이름 or 컨테이너 id A. 컨테이너 이름을 이용한 복사 컨테이너 이름을 이용한 cp 명령어 사용방법은 아래와 같습니다. 이 때 명령어 실행은 컨테이너 내부가 아니라, 바깥에서 실행해 주어야 합니다. docker cp :/usr/src/app/db/app-db.db ~/Downloads/ 2024. 4. 12.
Linux 크론탭으로 작업 예약 마스터하기: Crontab 스케쥴링 특정한 시간에 스크립트로 작성한 작업들을 실행시키도록 하려고 할 때, 필요한 것이 리눅스의 크론탭인데요. 오늘은 이것을 활용하여 작업을 예약하는 방법에 대해서 정리해 보겠습니다. 1. Crontab(크론탭) 1-1. Crontab crontab은 유닉스 기반 시스템에서 반복적인 작업을 스케줄링하기 위해 사용되는 유틸리티입니다. crontab의 이름은 "cron table"의 줄임말인데요. 시간 기반 작업 스케줄러인 cron이 참조하는 설정 파일을 관리합니다. 쉽게 말해서 Crontab은 특정 시간, 날짜, 간격에 자동으로 스크립트나 프로그램을 실행하도록 스케줄을 설정해서, 미래의 반복적인 작업을 자동화 할 수 있게 도와줍니다. 1-2. 스크립트 크론탭을 정해진 시간에 실행하기 위해서, 실행할 스크립트를 .. 2024. 4. 10.
linux 환경변수 설정 방법 정리: Bash 와 Z Shell PATH 및 기본 에디터 변경(Nano) 환경변수에 PATH를 추가하거나, 기본에디터를 nano로 바꾸고 싶을 때, 환경변수를 정의해 놓고 사용하면 편리한데요. linux 에서 환경변수를 설정하는 방법에 대해서 정리해 보겠습니다.  1. 현재의 환경변수 값 알아보기 현재 linux에서 환경변수 값들을 알아보기 위해서는 아래 명령어를 입력해 주면 됩니다. 아래 명령어는 현재 시스템에서 설정된 모든 환경 변수의 이름과 해당 값들을 보여줍니다. printenv 'printenv' 명령어 볼 수 있는 환경변수 값들은, 모두 'echo $환경변수'로 개별적으로 확인해 볼 수 있습니다. 환경변수 값 중 PATH에 대한 값을 보고싶다면 아래 명령어를 사용합니다. echo $PATH 2.기본 쉘 확인하기 기본 쉘을 확인하는 명령어는 다음과 같습니다. ech.. 2024. 4. 9.
async 와 await 로 작성하는 읽기쉬운 비동기코드 # forEach Javascript에서 비동기를 사용할 때 Promise라는 API를 정리해 보았었는데요. 오늘은 또다른 API인 aysnc와 await에 대해서 정리해 보도록 하겠습니다. 1. async와 await Async와 await는 Javascript에서 비동기 처리를 쉽게 할 수 있게 해줍니다. 비동기 코드를 동기 코드처럼 읽고 쓰기 쉽게 만들어 주기 때문인데요. 콜백의 연쇄로 인한 복잡성을 피하고, 코드를 보다 직관적으로 만들 수 있게 도와줍니다. Promise에 대한 기본적인 이해가 있다면, async와 await의 개념을 쉽게 받아들일 수 있습니다. Promise에 대해서는 아래 글을 참조해 주세요. >> Javascript의 Promise를 알아보자 #ES6 1-1. Code를 통한 Promise 와.. 2024. 4. 6.
Handlebars 사용방법의 모든 것: Nodejs 뷰 템플릿 엔진 NodeJS와 함께 널리 사용하는 뷰템플릿 엔진인 Handlebars에 대해 정리하겠습니다. 1. Handlebars Handlebars는 JavaScript 템플릿 엔진입니다. 웹 애플리케이션에서 동적으로 HTML을 생성하는 데 사용되는데요. 중괄호'{{ }}'를 사용하여 템플릿 내에 변수, 조건문, 반복문 등을 삽입해 줍니다. HTML형식을 해치지 않으면서도, 서버에서 데이터를 가져와 동적인 HTML을 생성하는 데 유용합니다. 2. Handlebars 설치 아래는 npm을 이용해서, handlebars의 모듈을 설치하는 코드입니다. npm install express-handlebars --save 3. 중괄호 문법 handlebars 를 설정하고 사용하기 전에, 핵심이 되는 중괄호 문법을 보겠습니다.. 2024. 4. 2.
Javascript Spread 문법(...): 코드를 간결하게 만드는 비법 오늘은 Javascript의 spread 문법에 대해서 정리해 보겠습니다. 1. Spread(...)문법 이 문법은 ES6(ES2015)에 도입되었는데요. Spread 문법은 ... (세 개의 점)을 사용해 배열, 객체, 혹은 함수의 인자 등을 '펼쳐서(spread out)', 사용하게 해 주는데요. 이 점3개가 요소가 펼쳐짐을 의미합니다. 객체나 배열을 분해해 펼쳐서 사용하게 해주는 유용한 문법이지요. Spread 문법(...)을 이용하면, 배열이나 객체를 쉽게 조작할 수 있게 해주기 때문에, 코드가 간결해지고, 데이터 처리가 유연해 집니다. 함수 인자를 다루는 상황에서도 활용도가 매우 높구요. 2. Spread(...) 문법 사용 예 1-1. 배열 합치기 코드를 보면서 Spread 문법을 이해해 보겠.. 2024. 2. 17.
Javascript 구조 분해 할당에 대한 정리: JS destructuring assignment 오늘은 Javascript의 구조분해 할당(destructuring assignment)에 대해서 정리해 보겠습니다. 1. 객체 구조 분해 할당(destructuring assignment) 1-1. 구조 분해 할당의 Before and After 구조 분해 할당은, 객체나 배열을 분해하여서, 그 값들을 개별 변수에 담을 수 있게 하는 Javascript의 표현식을 가르킵니다. 먼저 객체에 대한 구조분해할당의 예제를 보겠습니다. 구조 분해 할당이 있기 전에는, 아래의 person이라는 객체의 값을, 각각의 변수에 담기위해서, 아래와 같이 일일히 객체에 접근해 변수에 담아주어야 했습니다. const person = { name: 'John Bark', age: 30, job: 'Software Engine.. 2024. 2. 6.
Linux 명령어 및 단축키 중 자주 사용하게 되는 것 정리 # 권한변경 오늘은 자주사용하게 되는 Linux명령어와 단축키에 대해서, 정리해 보도록 하겠습니다. 1. 프로그램의 설치 우분투의 리눅스 시스템에서 프로그램을 설치해주는 명령어는 아래와 같습니다. apt-get명령어가 우분투 프로그램 서버에서 실행파일을 다운받아 설치해 줍니다. 이 apt-get명령어는 root계정으로 사용해야 해서, sudo를 앞에 붙여서 사용합니다. sudo apt-get install 혹시 설치할 프로그램의 용량이 큰 경우는 설치할 것인지 한번 더 물어보게 되는데요. 아래와 같이 해 주면 yes가 되어서 자동으로 설치로 넘어갑니다. sudo ap-get install -y 참고로 update 명령어를 통해서 항상 update할 것이 있는지 확인해 주구요. 있다면 upgrade 명령어를 이용해 u.. 2024. 2. 1.
SCP로 서버에 파일 전송하기: 리눅스 기반 안전한 파일 전송 방법 처음 서버를 접하였을 때, 서버에 파일을 어떻게 보내야 하는지 모를 수 있습니다. 이 경우, 리눅스의 'scp' 명령어를 사용하면 파일 전송이 간단해집니다. 오늘은 scp 명령어를 이용한 파일 전송 방법에 대해 알아보겠습니다 1. SCP SCP는 Secure Copy의 약자로, 원격 시스템 간에 파일이나 디렉토리를 안전하게 복사하기 위한 리눅스의 명령어입니다. SSH(Secure Shell) 프로토콜을 기반으로 동작해서, 파일 전송 과정이 암호화되기 때문에, 중요한 파일들을 안전하게 전송할 수 있게 해 줍니다. 아래는 scp 명령어의 기본적인 사용법과 옵션에 대한 설명입니다. scp [옵션] [복사할 파일 or 디렉토리 경로] [복사할 대상의 경로] 주요 옵션으로는 다음과 같은 것들이 있습니다. -r: .. 2024. 1. 31.
Javascript 의 import 와 export 마스터하기: default vs named JavaScript에서 import와 export는 코드를 나눠서 작성하고, 필요한 부분만 골라 쓸 수 있도록 해 줍니다. export는 특정 기능이나 데이터를 다른 파일에서도 사용할 수 있게 해주고, import는 필요한 기능이나 데이터를 다른 파일에서 가져와 사용할 수 있게 해 주지요. 이렇게 하면 코드를 여러 파일에 나눠서 관리할 수 있어, 보다 체계적이고 깔끔하게 코드를 작성할 수 있습니다. 1. Export (Named Export)와 import 변수, 함수, 클래스 등을 다른 파일에서 사용할 수 있게 하려면, 선언할 때 앞에 export 키워드를 붙여주면 됩니다. 이렇게 하면 해당 요소들을 내보내기 할 수 있어서, 다른 파일에서 import 해 가져다 사용할 수 있게 됩니다. 아래에서는 ar.. 2024. 1. 1.
JSX 이것만 알면 된다: React 와 NextJS 를 위한 UI 오늘은 React JS 나 Next JS에서 사용되는 JSX에 대해서 정리해 보도록 하겠습니다. 1. JSX JSX는 Javascript의 extention 인데요. Javascript 파일안에서, HTML과 유사한 마크업언어를 사용하도록 해 줍니다. 기존의 HTML지식에, 몇가지 사용 규칙들만 알면 쉽게 익숙해질 수 있습니다. 2. JSX 사용 규칙들 2-1. 하나의 root attribute 를 return JSX에서는 괄호 () 안에 HTML 태그를 넣어 UI를 만들어야 합니다. 이때 모든 태그는 하나의 루트 엘리먼트로 감싸져야 해요. 예를 들어, 여러 태그를 와 같은 한 개의 루트 엘리먼트로 묶어서 사용합니다. 아래에서는 태그를 루트 엘리먼트로 사용하였네요. const right = ( 테스트1.. 2023. 12. 30.
도메인 등록을 하기 전 알아야 하는 것들 # DNS 자신만의 웹사이트를 열기 위해서는 도메인이라는 것이 필요합니다. 도메인이란, 간단히 말해, 전세계인 이용하는 네트워크상의 주소인데요. 튜토리얼을 따라 클릭 몇 번으로 도메인을 설정할 수도 있기는 합니다. 하지만, 도메인에 대해 이해하고 간다면, 이후의 여정이 훨씬 수월해질 것 입니다. 이제 도메인에 대해서 알아보도록 하겠습니다. 1. 도메인 1-1. 도메인 인터넷은 수많은 컴퓨터들이 서로 연결되어 있는 거대한 네트워크인데, 각 컴퓨터는 인터넷에 연결되 있는 동안, 유일한 IP 주소를 가지도록 되어 있습니다. 이 때 IP주소들은 모두 숫자로 구성되어 있는데요. 예를 들면, '192.0.2.1'과 같이요. 이런 주소는 기억하기가 너무 어렵습니다. 그래서, 네트워크의 컴퓨터들의 구분은 이러한 숫자로 하되, .. 2023. 12. 20.
HTTP 메시지 구조를 이해해 보자 오늘은 HTTP 메시지 구조에 대해서 정리해 보도록 하겠습니다. 메시지 구조에 대해 알아보기 전에, HTTP에 대해서도 간단히 알아보고 가겠습니다. 1. HTTP 1-1. HTTP의 의미 HTTP(HyperText Transfer Protocol)는, 네트워크 위에서 데이터를 주고받는 방식을 정의합니다. 웹 브라우저에 URL을 입력할 때마다 HTTP가 동작해서, 원하는 웹 페이지의 데이터를 요청하고 받아오는 것이죠. 심플하면서도 다양한 데이터 형식을 지원하고, 새로운 기능을 쉽게 추가할 수 있어서, 빠르게 변하는 인터넷 환경에 잘 적응할 수 있었는데요. 이로인해 HTTP는 웹 통신의 표준으로 자리 잡았습니다. 모든 웹 브라우저와 서버가 이 프로토콜을 사용하여 정보를 주고받기 때문에, 웹의 보편적인 언어라.. 2023. 12. 19.
getpass 로 안전하게 패스워드 입력받기 # Python 암호입력 오늘은 Python 모듈 중 키보드로 패스워드를 입력받을 때 사용하는 모듈에 대해서 정리해 보도록 하겠습니다. 1. getpass 모듈 import getpass 는 파이선내장모듈로 pip를 이용해서 설치할 필요가 없습니다. 내장함수이기 때문에, 아래와 같이 import 해서 사용하면 됩니다. import getpass 2. getpass() getpass모듈의 핵심 API는 getpass()입니다. 유저가 패스워드를 입력할 때, 터미널에 입력한 문자를 보여주지 않도록 해 줍니다. 다만, 우리가 일반적으로 생각하듯, 점(.)으로 암호를 표현해주는 것은 아니구요. 입력해도 화면에 표현해주지 않는 방식을 취합니다. 점(.)으로 표현하고 싶다면, 좀 더 코딩을 해 주어야 합니다. 3. getpass() 사용예.. 2023. 11. 28.
Pyperclip 정리 # Python 클립보드 라이브러리 오늘은 python 에서 클립보드를 컨트롤 해주는 pyperclip 라이브러리를 정리하겠습니다. 1. Pyperclip pyperclip 은 쉽게 말해서, 특정 데이터를 복사해서 클립보드에 저장하였다가, 다시 붙여넣을 수 있도록 해주는 라이브러리입니다. 2. 라이브러리 설치 라이브러리는 pip 를 이용해서 해 주면 됩니다. pip install pyperclip pip에 대해서는 아래 글을 참조해 주세요. >> pip 로 패키지 설치하고 관리하는 방법 # Python 3. copy() and paste() pyperclip의 api의 핵심은 다음의 2가지 입니다. copy() paste() 클립보드에 복사해서 넣을 때는 copy()를, 클립보드의 텍스트를 가져올 때는 paste()를 사용하면 됩니다. 2023. 11. 26.
ifEmpty 와 orEmpty 에 대해서 알아보자 # Kotlin 오늘은 Kotlin 의 ifEmpty 와 orEmpty 에 대해서 정리해 보도록 하겠습니다. 1. ifEmpty Kotlin에는 emptyList인 경우에 디폴트 값을 넘겨줄 수 있는 API가 있는데요. 바로 ifEmpty()입니다. 이 함수의 코드를 보면 아래와 같은데요. isEmpty()로 Collection이 비어있는지를 확인하고, 비어있다면 디폴트 값을 넘겨줍니다. 2023. 5. 30.
Bottom Navigation 구현방법 총정리 # Route 오늘은 BottomNavigation 의 구현방법에 대해서 정리해 보도록 하겠습니다. BottomNavigation을 구현하기 위해서는, Jetpack Compose Navigation 구현방법에 대해서 알고 있으면 도움이 되는데요. 이에 관해서는 아래 글을 참조해 주세요. >> Navigation 구현 방법 총정리 # Route Jetpack Compose 1.  Route 정의 먼저 BottomNavigation 에서 사용할 Route 들을 sealed class 로 정의해 주겠습니다. badge count 를 활용하기 위해서, badgeCount 를 넣어주었습니다. sealed class Screen( val route: String, val title: String, val icon: Image.. 2023. 5. 29.
Navigation 구현 방법 총정리 # Route Jetpack Compose 오늘은 Jetpack Compose 에서 구현하는 Navigation 에 대해서 정리해 보도록 하겠습니다. 1. Navigation Library 가장 먼저 준비할 것은 navigation 구현을 위해 라이브러리를 implement 하는 것 입니다. 아래의 라이브러리들이 모두 이 글의 예제를 구현하는데 필수적인 것은 아니지만, navigation과 viewModel, savedState 등을 같이 사용하기에 도움을 주는 라이브러리이므로 포함시켰습니다. app레벨의 build.gradle에 implement 시켜주면 됩니다. dependencies { def nav_version = "2.5.3" implementation "androidx.navigation:navigation-compose:$nav_v.. 2023. 5. 27.
Nested Navigation 구현 및 총정리 # 중첩 Route Jetpack Compose 실제 앱을 만들다보면, Navigation Graph가 복잡해 지게 됩니다. 중첩된, 즉 nested navigation이 필요하기 때문인데요. 오늘은 Jetpack Compose 에서 Nested Navigation 을 구현하는 방법에 대해서 정리해 보겠습니다. 이 글을 이해하기 위해서는 Jetpack Compose Navigation 구현방법에 대해서 알고 있어야 하는데요. 이에 관해서는 아래 글을 참조해 주세요. >> Navigation 구현 방법 총정리 # Route Jetpack Compose 1. 라이브러리 Implementation 이 글에 나오는 코드를 구현하기 위해서, 아래 라이브러리들이 app레벨의 build.gradle에 implement 되어야 합니다. dependencies { d.. 2023. 5. 26.
CoerceIn, coerceAtMost, coerceAtLeast 범위지정 함수에 대한 정리 # Kotlin 오늘은 Kotlin 에서 값의 범위를 강제할 수 있는, coerceIn, coerceAtMost 그리고 coerceAtLeast 에 대해서 정리해 보겠습니다. 1. CoerceIn 원래 Coerce 라는 단어는 강제로 무언가를 하게 한다는 의미인데요. CoerceIn 은 강제로 어느 범위로 넣게 하겠다는 것 입니다. 인자로 최소값과 최대값을 받는데요. 이 최소값보다 적게나오면, 최소값을, 최대값보다 크게나오면, 최대값을 리턴하도록 강제해주는 API 입니다. 예를 들어서 아래 코드와 같은 경우를 들 수 있습니다. 아래는 Percent 값을 구하는데, distance나 distanceBetween 이 마이너스가 나올 경우에도, 0과 1 사이에서만 값을 주도록 강제해 주었습니다. val distanceInPe.. 2023. 5. 26.
EOFException 발생시키는 empty body 대응 방법 # Retrofit Retrofit 을 이용해서 정상적으로 서버의 데이터를 요청하였을 때, 200 OK를 받았는데도, 서버에서 empty body를 주어서, EOFException 이 발생하는 경우가 있습니다. 오늘은 이것의 대응 방법에 대해서 정리해 보겠습니다. 1. 서버 200 과 EOFException 위에서 언급한 것처럼, 서버에서 200 OK 를 주었는데도, body가 비워져 있어서, EOFException 이 발생할 수 있습니다. 서버에서는 데이터 없으니 "" 를 보내버린 것이구요. 아래와 같이 body는 0-byte가 되어 있습니다. 2023. 5. 25.
MapNotNull 과 MapNotNullTo 에 대한 정리 # null 제거 오늘은 MapNotNull 과 MapNotNullTo 에 대해서 정리해 보도록 하겠습니다. 1. MapNotNull mapNotNull은 엘리먼트에 주어진 transform 연산자를 적용하여서, null 이 나오지 않는 값들로만 list 를 구성해서, 반환해주는 함수입니다. 이름에 map이 있지만, 반환하는 타입은 아래와 같이 List 입니다. null 을 제거해주는 방어연산자라고도 할수 있겠습니다. 2. MapNotNull 예제1 코드를 보면서 이해해 보겠습니다. mapNotNull연산자 안에서, 2로 나누어 나머지가 없이 딱 떨어지는 값은 2를 곱해주고, 그렇지 않은 경우는 null을 리턴하는 조건문을 넣어주었습니다. val numbers = listOf(1, 2, 3, 4, 5, 6) val dou.. 2023. 5. 24.
Broadcast Receiver 등록하고 시스템 이벤트 받아서 처리하기 안드로이드의 시스템은 이벤트가 발생할 때 broadcast를 보내줍니다. 이름이 broadcast이니, 방송을 한다고 해야할까요. 안드로이드 내부적으로 이벤트가 발생을 했다고 알려주는 것인데요, 안드로이드 앱에서, 시스템에게 특정한 이벤트에 관해 관심이 있다고 등록을 하면, broadcast를 수신할 수 있게 되는데요. 오늘은 사용자가 이어폰을 스마트폰에서 빼거나 꽂았을 때, 시스템 이벤트를 받아서 토스트 팝업을 띄우는 방법에 대해서 정리해보겠습니다. 네이버 뮤직 같은 앱들이 헤드폰을 빼거나 꽂았을 때, 플레이를 멈추도록 하는 기능도 broadcastReceiver를 이용했을 거라고 생각이 됩니다. 1. BroadCast 받는 방법 안드로이드의 시스템으로부터는 여러가지 broadcast를 받아서 볼 수 .. 2023. 5. 23.
Vibrator 로 구현하는 안드로이드 진동 앱을 통해 사용자에게 알리는 방법중 진동은 매우 중요한 수단중 하나인데요. 오늘은 Vibrator API를 이용해서 이를 구현하는 방법에 대해서 정리해보겠습니다. 1. Manifest 설정 제일 먼저 해주어야 하는것은 permission을 얻는 것인데요. 다행히도 동적으로 얻어야 하는 수준의 permission은 아닙니다. 아래와 같이, manifest 에서 uses-permission만 VIBRATE에 대해서 정의해주면 됩니다. 2. Vibrator 객체 얻기 가장 먼저 할 일은 Vibrator객체를 얻어오는 것 입니다. 안드로이드 하드웨어와 관련된 클래스들이 그렇듯이, getSystemService 메소드를 사용해서 객체를 얻어와야 합니다. API23 버전(버전 M)부터는 아래와 같이 얻어오구요. 그.. 2023. 5. 23.
List 아이템 부분추출 함수 정리 # take, takeWhile, takeLast, drop, slice, first and last 오늘은 list 나 Sequence에 적용할 수 있는, 아이템을 부분적으로 추출하는 방법에 대해서 정리해 보도록 하겠습니다. 오늘 볼 API에는 다음과 같은 것들이 있는데요. take, takeLast, takeWhile, drop, dropWhile, slice first, last, firstOrNull, lastOrNull 하나씩 보도록 하겠습니다. 1. take api 이름에서 느껴지는 것처럼, 처음 n개의 요소들을 반환해 줍니다. 아래 코드에서는 처음3개를 취하기 위해서, 3을 인자로 넣어주었구요. 결과는 앞의 1,2,3을 반환해 주게 됩니다. val numbers = listOf(1, 2, 3, 4, 5) val result = numbers.take(3) println(result) // 결.. 2023. 5. 15.
DisposableEffect 에서 화면종료 전 리소스 정리 구현 # 구 onDestroy jetpack Compose 오늘은 Jetpack Compose 의 Side effect 중 하나인, DisposableEffect 에 대해서 정리해 보도록 하겠습니다. 참고로, SideEffect 에 대해서는 아래 글을 참조해 주세요. >> LaunchedEffect , Side Effect 그리고 rememberCoroutine 총정리 1. DisposableEffect 1-1. DisposableEffect Disposable 은 일회용처럼 사용하고 버릴 수 있는 물건을 가르키는데요. Composable 에서 DisposableEffect 는, 아래의 경우에 실행이 됩니다. 아래에서 key값은 DisposableEffect에 인자로 들어가는 key값을 말합니다. Composable 이 Composition에서 제거되는 경우(C.. 2023. 5. 13.
LaunchedEffect , Side Effect 그리고 rememberCoroutine 정리 오늘은 Jetpack Compose 의 Side Effect 와 LaunchedEffect, 그리고 rememberCoroutine 에 대해서 정리해 보도록 하겠습니다. 1. Side Effect Side effect 의 단어 뜻은 원래 부차적이고, 의도하지 않은 효과를 말하는데요. 부작용을 가르키기도 합니다. Jetpack Compose 에서, Side effect 는 Composable 함수(의 scope)를 벗어난 곳에서 앱의 state 변경이 일어나는 것을 뜻 합니다. 참고로 State 에 대해서는 아래 글을 참조해 주세요. >> State 를 이해하고 TextField 구현하기 # Jetpack Compose UI Part2 공식문서의 언급된 것에 따르면, Composable 의 이상적인 형태는.. 2023. 5. 12.
BackHandler 에 대한 정리 # 유저가 Back 버튼 누를 때 Jetpack Compose 오늘은 Jetpack Compose 에서 유저가 백버튼을 누를 때, 구현해야 하는 코드를 넣는 부분인 BackHandler 에 대해서 정리해 보겠습니다. 1. BackHandler BackHandler는 Compose의 탑레벨 Composable 함수인데요. 유저가 시스템의 back button을 눌렀을 때, 이벤트를 핸들링 할 수 있는 곳 입니다. 코드로 보도록 하겠습니다. 보다시피 람다블록에 코드만 넣어주기만 하면 되기 때문에 정말 쉬워보입니다. @Composable fun MyScreen() { BackHandler(onBack = { println("Back button pressed") }) } 2023. 5. 11.