본문 바로가기
반응형

분류 전체보기362

Jetpack Compose 에서 점선 그리는 방법 정리 # Border dashed line 오늘은 Jetpack Compose 에서 점선을 그리는 방법에 대해서 정리해 보도록 하겠습니다. 1. PathEffect 점선을 그릴 때 필요한 객체가 dashPathEffect객체입니다. DashPathEffect는 JetpackCompose만을 위한 것이 아니라, API 레벨1 시절부터 존재해오던 고전 API입니다. 첫번째 인자가 interval을 나타내구요. 아래와 같이 2이상의 짝수개로 넣어주어야 합니다. val pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 10f), 0f) 2022. 11. 25.
투명도 Hex Code # Alpha Hexadecimal Color 디자이너들이 사용하는 툴에서는 컬러값이라는 "333333"과 같은 값과 투명도 80%이런식으로 나타내기 때문에, 경우에 따라서 UI에 나타낼때는 Alpha값인 투명도를 Hex코드로 바꿔주어야 하는데요. 오늘은 자주 사용하는 투명도의 HexCode에 대해서 정리해 보겠습니다. 1. 투명도에 따른 HexCode 투명도에 따른 HexCode를 표로 정리하면 다음과 같습니다. 개인적으로는 90%인 E6, 80%인 CC나, 60%인 99를 많이 사용하게 되는 것 같습니다. 40%미만은 거의 사용해본적이 없는 것 같네요. 투명도 HexCode 100% FF 98% FA 95% F2 90% E6 85% D9 80% CC 70% B3 60% 99 50% 80 40% 66 30% 4D 20% 33 10% 1A 2. 사용.. 2022. 11. 24.
BottomBar Hide 구현방법 정리 # Android Jetpack Compose Jetpack Compose에서는 Acitivity간 이동을 할일은 거의 없습니다. 대신 Compose에서 Navigation을 하는데요. 현재 화면의 route에 따라서 BottomBar 가 사라줘 주어야 할 경우가 있습니다. 오늘은 이것을 구현하는 방법에 대해서 정리해 보았습니다. 참고로 이글을 이해하기 위해서는 Navigation의 구현 방법에 대해서 알고 있어야 하는데요. 이에 대해서는 아래 글을 참조해 주세요. >> Navigation 과 Bottom Navigation 구현방법 정리 # Jetpack Compose 1. BottomBar 가리기 BottomBar 자체를 가리는 것은 그리 어려운 일은 아닙니다. 단순히 아래 이미지와 같이 BottomNavigationBar()부분을, if문으로 .. 2022. 11. 22.
Jetpack Compose 에서 Activity Result 가져오기 # rememberLauncherForActivityResult 오늘은 Jetpack Compose 에서 Acitivity Result를 가져오는 방법에 대해서 정리해 보도록 하겠습니다. 1. rememberLauncherForActivityResult 이전에는 Activity에서 다른 Activity로부터 결과값을 가져올 때 registerForActivityResult를 사용하였습니다. 이와 관련해서는 아래 글을 참조해 주시면 됩니다. >> registerForActivityResult 구현방법 정리 # 예전 onActivityResult Jetpack Compose에서 갤러리에서 이미지등을 가져오려면 registerForActivityResult가 아니라, rememberLauncherForActivityResult API를 사용해 주어야 합니다. 이 API는 .. 2022. 11. 21.
Contentprovider 와 ContentResolver 이용한 CRUD # Mime-type Uri 오늘은 ContentProvider 와 ContentResolver에 대해서 정리해 보도록 하겠습니다. 1. Content Provider 와 ContentResolver 1-1. Content Provider 원래 Data들은 되도록이면 각 앱별로 Private하게 저장하고 Access하는 것이 안전한데요. 반대로 주소록이나 전화기록, Media(Audio, Video, Photo) 데이터들은 그렇지 않습니다. 예를 들어서, 주소록 데이터를 앱별로 앱내 Private Directory에 저장하기 보다는, ContentProvider에 저장하고, 다른 앱에서도 공유해서 사용하는 것이지요. 이러한 Data들은 앱들간에 자유롭게 Access 할 수 있어야 하는 부분입니다. ContentProvider는 컨텐.. 2022. 11. 18.
Uri 에서 Bitmap 파일 생성하는 방법 # getBitmap ImageDecoder 오늘은 Uri를 가지고 Bitmap 파일을 만드는 방법에 대해서 정리해 보도록 하겠습니다. 1. 필요한 API 1-1. ImageDecoder 와 ContentResolver API28부터 지원되기는 하지만, 파일을 Drawable 또는 Bitmap으로 전환시켜줍니다. 정말 다양한 소스로부터 Bitmap객체를 만들어주도록 도와주는데요. 마침 이 API가 uri소스로부터 Bitmap 객체를 만들어주는 createSoruce함수도 제공해주고 있습니다. 광고 ImageDecoder에는 첫번째 인자로 ContentResolver객체를 필요로 하는데요. ContentResolver는, Uri를 이용해서, ContentProvider로부터 데이터의 CRUD(create, retrieve, update, and de.. 2022. 11. 17.
Navigation Drawer 구현방법 # Jetpack Compose 오늘은 Jetpack Compose 를 이용해서 Navigation Drawer 를 구현하는 방법에 대해서 정리해 보도록 하겠습니다. 이 글에서는 TopAppBar등 Scaffold를 이용하면 빠르게 구현할 수 있는 요소들이 있어서, Scaffold 를 사용하고 있는데요. 이에 대한 기본적인 내용은 아래 글을 참조해 주세요. >> Scaffold SnackBar Floating Action Button구현 # Android Jetpack Compose UI Part3 1. Drawer에 표현할 메뉴들 Enum Class로 정의하기 Drawer에 들어올 메뉴들을 미리 정의해 놓았습니다. sealed class로 정의하면, 다이나믹한 데이터를 추가할 수 있지만, enum Class로 들어오면, iterate.. 2022. 11. 16.
Scaffold, SnackBar 그리고 FloatingActionButton 정리 # Jetpack Compose UI Part3 지난 글에서는 Jetpack Compose의 중요한 개념인 State에 대해서 정리하였는데요. 이번 글에서는 Scaffold를 이용해서 머리티얼디자인을 사용하는 방법에 대해서 정리해 보도록 하겠습니다. Jetpack Compose의 지난 글 링크는 아래와 같습니다. >> Jetpack Compose 기본 UI Part1 # Color Card Modifier Column Row >> Jetpack Compose 기본 UI Part2 # State TextField 1. Scaffold Layout 1-1. Scaffold Layout Scaffold 는 Material Design 구조가 적용되어 있는 레이아웃입니다. 이 레이아웃을 이용하면 화면에 Material Design 컴포넌트들을 적절하게 넣을 .. 2022. 11. 15.
State 를 이해하고 TextField 구현하기 # Jetpack Compose UI Part2 지난 글에 이어서 Jetpack Compose 기본 UI Part2에서는 State 에 대해서 다루고, 이를 이용해 TextField를 구현해 보도록 하겠습니다. 지난 part1 글은 아래 링크를 참조해주세요. >> Jetpack Compose UI Part1 # Color Card Modifier Column Row 1. State 1-1. State State의 의미는 상태인데요. 현재 UI의 상태를 의미합니다. UI는 유저나 네트워크의 응답등 따라서 변경된 상태가 반영되어야 하는데요. Composable 함수는 이렇게 변화된 상태를 나타낼 때, 변경된 Value를 가지고 관찰하고 있는 State를 통해 Notify를 받고 그 값을 이용해 Composable함수를 재호출합니다. 이 과정에서, Comp.. 2022. 11. 14.
Android 리소스 정리시 사용하는 Naming Convention 오늘은 Android 리소스 Naming Convention에 대해서 정리해 보도록 하겠습니다. 여기서 사용한 naming 규칙은 개인적으로 정리한 것이니 참조만 해 주세요. 1. Drawable Naming drawable에 들어가는 이미지 파일들의 prefix에는 아래와 같은 타입들을 사용해 주는데요. 가능하다면, "이미지구분_무엇_어디에서" 순서로 정해서 사용하는 것이 좋습니다. 구분 Prefix 예 Button btn_ btn_download Icon ic_ ic_like_feed Launcher Icon ic_launcher ic_launcher_myapp Menu menu_ menu_more CheckBox chb_ chb_alarm Tab ic_tab ic_tab_something 2022. 11. 12.
Jetpack Compose UI Part1 # Color Card Modifier Column Row 오늘은 안드로이드 Jetpack Compose에 대해서 알아보고, 기본적인 UI API들에 대해서 정리해 보겠습니다. 1. Android Jetpack Compose 1-1. NoXML, welcome functions 이제 xml 필요없이 kotlin만으로, Android의 UI까지 개발할 수 있게 되었는데요. 만약, 텍스트, 라디오 버튼의로 구성된 UI가 가로로 있다고 가정해 보겠습니다. 이전에는 xml로 UI를 구성하고, 그것의 reference를 Kotlin코드에서 가져와서, 응답이나 반응등을 코드에서 구현하였는데요. background 이미지를 바꾸거나, 색을 변경해 주었습니다. 이제는 아래와 같은 코드로 UI를 구성하게 되었습니다. Compose에서는 UI 요소들은 더이상 객체가 아니라 함수입.. 2022. 11. 11.
SQLite NodeJS 모듈 이용해서 CRUD 구현하기 # DBBrowser SQLite3 오늘은 SQLite 데이터베이스에 대해 알아보고, NodeJS에서 SQLite3 모듈을 활용해, CRUD (생성, 읽기, 업데이트, 삭제) 작업을 구현해 보겠습니다. 1. SQLite 1-1. SQLite SQLite는 C언어로 개발된 라이브러리입니다. 크기가 작고 속도가 빠르며 상대적으로 안정적인 특성을 가진 SQL 데이터베이스 엔진인데요. 이러한 장점 덕분에 전 세계에서 가장 널리 사용되는 데이터베이스 엔진 중 하나로 자리잡았습니다. SQLite의 핵심 특징 중 하나는 모든 데이터베이스 정보를 단 하나의 파일에 저장한다는 점입니다. 이로 인해 여러 테이블, 인덱스, 스키마 등을 포함한 모든 데이터를 한 파일 안에 담을 수 있으며, 데이터베이스 서버를 별도로 구동할 필요 없이 파일 하나로 쉽게 데이터베.. 2022. 11. 8.
Room DB 에 DB파일 넣어서 사용하기 # 로컬데이터베이스 SQLite 오늘은 RoomDB에 미리 데이터를 넣어서 사용하는 방법에 대해서 정리해 보도록 하겠습니다. 참고로 이 글은 RoomDB를 알고 있어야 이해할 수 있으므로, Room에 관한 기본적인 사항은 아래 글을 참조해 주세요. >> Room Persistence Library 총정리 # Android SQLite 1. SQLite 파일 1-1. Room 과 SQLite Room에 대한 설명을 보면, SQLite위에 추상레이어를 제공하는 라이브러리라는 설명이 나옵니다. RoomDB에 디비파일을 미리 넣을 때 어떤 파일을 넣어야 하는지 감이 옵니다. 바로 SQLite db파일입니다. 1-2. SQLite 파일 생성 만약 NodeJS의 Express Django같은 프레임워크를 사용한다면, SqLite3 모듈을 이용해서.. 2022. 11. 4.
CSS Selector 와 함께 사용하는 Document API 정리 # textContent innerText querySelector 오늘은 CSS Selector 와 이를 활용해서 자주 사용하는 Document Elements API 에 대해서 정리 해 보도록 하겠습니다. 1. CSS Selector Selector를 볼 때, element, class, id, attribute에 대해서 잘 구분해 보아야 합니다. 특정한 모듈을 사용할 때 API에 항상 친절하게 설명되어 있지는 않기에, 부족한 부분은 검색을 해야 하는데요. 이 때 정확한 명칭을 알고 있으면 좀 더 빠르게 정보를 얻을 수 있습니다. Selector 타입 예 의미 .class .infoArea class가 infoArea .class1.class2 .info1.info2 class attribute에 name1과 name2가 들어간 것을 찾는다. #id #tab1 id가.. 2022. 11. 3.
Time Picker 와 Date Picker Compose 로 구현하기 # Android Jetpack Picker 오늘은 Jetpack Compose로 Time Picker 와 Date Picker 를 구현하는 방법에 대해서 정리해 보도록 하겠습니다. 이 글에서 사용하는 API는 특별히 Jetpack Compose 만의 API는 아니구요. 예전부터 사용되던 API인데, ComposeUI에서 가져다가 State에 저장해서 사용하는 방법입니다. 언젠가는 구글에서 JetpackCompose만의 API가 나올지도 모르겠지만, 아직은 기존의 API를 가져다가 사용해야 합니다. 1. TimePicker 1-1. TimePickerDialog API TimePicker Dialog는 API1부터 존재해오던 API입니다. 이 클래스의 생성자를 보면, 다음과 같이 OnTimeSetListener 콜백을 넣어주어야 한다는 것을 알 수.. 2022. 10. 31.
Android 에서 동적 권한 얻기 # State registerForActivityResult Runtime Permission 안드로이드를 앱을 개발하면서, 부딛히는 어려움 중 하나는, 바로 Runtime Permission 입니다. 이 글을 쓰고 4년뒤인 지금 Kotlin코드로 다시 업데이트하였는데요. Android OS버전이 올라가면서 유저에게 승인받아야 할 권한은 계속 늘어나고 있습니다. (심지어 Notification도 권한을 받아야 한다고 하는군요.) Runtime Permission은 External Storage와 관련된 작업인, 주소록이나, DB파일 혹은 이미지캐쉬를 저장하거나, 위치를 사용하는 앱일 경우에는 반드시 넘어야 할 산인데요. 오늘은 유저에게 외부저장소의 읽고 쓰기에 대해 동적으로 권한을 요청하는 것을 가지고 정리해 보도록 하겠습니다. 1. Manifest 선언먼저 먼저 Manifest에서 권한을 얻는다.. 2022. 10. 24.
ConstraintLayout 을 Compose 로 구현하는 방법 # Android 오늘은 Compose를 이용해서, Constraint Layout의 구현방법에 대해서 정리해 보도록 하겠습니다. 1. ConstrainLayout 라이브러리 constraint layout을 이용하기 위해서는, 아래와 같이 app레벨의 build.gradle에서 라이브러리를 implement 해 주어야 합니다. implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1" 2. ConstraintSet ConstraintLayout을 사용하기 위해서, UI에 id를 부여해서 사용하는데요. 아래처럼 createRefFor()함수로 reference를 생성한다음, constrain()함수에 인자로 넣어서 사용합니다. constrain람다 .. 2022. 10. 20.
Navigation 과 Bottom Navigation 구현방법 정리 # Jetpack Compose 이 글은 예전에 작성된 글로서, 주제가 방대하여서 Navigation과 Bottom Navigation 의 구현방법을, 아래 2개의 글로 분리하여 정리하였습니다. 1. Navigation 구현방법 Navigation 구현방법은 아래 글을 참조해 주시면 되구요. >> Navigation 구현 방법 총정리 # Route Jetpack Compose Navigation 구현 방법 총정리 # Route Jetpack Compose 오늘은 Jetpack Compose 에서 구현하는 Navigation 에 대해서 정리해 보도록 하겠습니다. 1. Navigation Library 가장 먼저 준비할 것은 navigation 구현을 위해 라이브러리를 implement 하는 것 입니다. 아래의 라이 developer88... 2022. 10. 19.
Mac 키체인 Access 토큰 비밀번호 업데이트 # Github Bitbucket KeyChain Git에 인증을 하거나, SourceTree에서 인증후 push를 할 때, Keychain을 요구하는 화면이 뜨는 것을 볼 수 있습니다. 이것은 키체인 설정이 잘못되었기때문인데요. 오늘은 이 문제를 해결하는 방법에 대해서 정리해 보도록 하겠습니다. 1. KeyChain Access 와 Personal Access Token 1-1. 키체인 맥에서는 키체인을 이용해서, 암호나 계좌번호 등 중요정보를 저장해 사용하기 편리하게 하고 보안을 유지하는데요. 참고로 '로그인 키체인'이라는 것이 있는데요. 이것은 맥컴퓨터를 켜서 로그인할 때 사용하는 로그인 암호를 말합니다. 1-2. Github나 Bitbucket에서 발생하는 키체인 문제 Github나 Bitbucket에서 인증하는데 있어서, 기존 Password를.. 2022. 10. 15.
Github 에서 발급하는 Personal Access Token 이제 Github에서 사용하는 password 로 push할 때, 원격저장소 인증이 불가능해 졌습니다. 그래서 Personal Access Token이라는 것을 발급받아, password로 써야하는데요. 오늘은 이것에 대해서 정리해 보도록 하겠습니다. 참고로 Bitbucket도 이와 같은 이슈가 있어서 github가 비슷한 방식으로 문제를 해결해야 하는데요. bitbucket에도 계정이 있다면, 아래 글을 참조해 볼 수 있습니다. >> Bitbucket App Passwords 이슈 해결 # Account Sourcetree 1. Github 사이트에서 Personal Access Token 발급 Token발급받는데 가장 중요한 것은 메뉴를 찾는 것인데요. 먼저, github사이트로 이동해서, 우측상단의.. 2022. 10. 13.
StateFlow 정리 # Android Kotlin Coroutine getStateFlow StateIn 오늘은 Kotlin의 StateFlow 에 대해서 정리해 보도록 하겠습니다. StateFlow도 Flow API의 하나인데요. Flow에 대한 내용은 아래 글을 참조해 주세요. >> Kotlin Coroutine Flow 총정리 part3 # launchIn 1. StateFlow StateFlow는 업데이트가 가능한 데이터값을 가지는 State라는 것을 가지고, collector에게 emit(전파)하는 인터페이스입니다. SharedFlow를 상속받은 인터페이스 이기도 한데요. State를 가지고 있다가, 변경되면 emit을 해주는 역할을 하는 핫스트림이라고 생각하면 됩니다. 핫스트림과 콜드스트림에 대해서는 아래 글을 참조해 주세요. >> Kotlin Coroutine Flow 총정리 part3 # la.. 2022. 10. 12.
Sealed Class 총정리 feat. enum Class 오늘은 Kotlin의 Sealed Class에 대해서 알아보도록 하겠습니다. 1. Sealed Class 와 Interface 1-1. Sealed Class 와 Interface Seal의 뜻은 밀봉하다 봉인하다는 뜻인데요. SealedClass는 abstract클래스여서 객체로 만들수 없는 자신과, 자신을 직접 상속받는 서브클래스나 interface 들로 구성되어 있습니다. 외부의 다른 Class들은 이 sealed클래스로부터 상속을 받을 수 없도록 봉인되어 있습니다. 이렇게 외부에서 확장되지 않은 밀봉된 구조를 가짐으로서, 컴파일타임에 코드를 작성하면서, 서브클래스들에 접근해서 사용이 가능해 지는 것 이지요. 이 서브클래스들은 각각의 특성에 따라서 다양한 생성자를 가질 수 있는데요. 데이터를 받아서.. 2022. 10. 11.
Kotlin By 키워드에 대한 이해 # Property Delegate Pattern 오늘은 Kotlin에서 많이 사용되는 by 키워드에 대해서 정리해 보려고 합니다. by 키워드에 대해 알아보기 전에, 그 근간이 되는 Deletgate Pattern에 대해서 알아 보도록 하겠습니다. 1. Delegate Pattern 에 의한 Class Delegatation (클래스 위임) Delegate 라는 의미는 위임한다는 뜻 입니다. 프로그래밍에서 자주 등장하는 용어이기도 한데요. 코드를 보면서 이해해 보도록 하겠습니다. 아래에는 같은 Car라는 인터페이스를 상속받는, Tesla라는 클래스와 Kia라는 클래스가 있습니다. Testla는 일반적인 클래스 이구요. Kia는 Delegate패턴을 이용하였습니다. 2022. 10. 11.
Kotlin Coroutine Flow 총정리 part3 # launchIn 지난 글에 이어서 part3에서는 Coroutine의 Flow에 대해서 정리해 보도록 하겠습니다. 지난 part1과 part2는 아래 링크를 참조해주세요. >> Kotlin Coroutine 총정리 part1 # launch, async, Context, Job, CoroutineScope >> Kotlin Coroutine 총정리 part2 # Cancellation, ExceptionHandling 1. Flow 1-1. Flow Coroutine의 suspend 함수는 비동기이기는 하지만 값을 하나만 return해 줍니다. 지속적으로 혹은 한번에 여러개의 값들이 나오는 경우에 대응하기 위해서 만든, Coroutine의 비동기 스트림 API가 flow입니다. RxJava API를 사용해보았다면 사용방.. 2022. 10. 10.
Kotlin Coroutine 총정리 part2 # Cancellation Exception Handling 이 글은 이전글에 이어서, Exception Handling과 Cancellation 그리고 여러개의 Job을 다룰때의 주의점등에 대해서 정리해 보겠습니다. 참고로 이전 글을 아래 링크를 참조해주세요. >> Kotlin Coroutine 총정리 part1 # launch async Context Job CoroutineScope 1. Exception Handling cancel된 Coroutine은 CancellationException을 전파한다는 것을 알게 되었는데요. 이것은 suspension포인트에서는 무시됩니다. 이것은 cancel을 위한 정상적인 방법이기 때문입니다. 1-1. Exception의 전파 코루틴의 Exception전파에 있어서는 2가지로 나누어 지는데요. Exception 전파 .. 2022. 10. 9.
Kotlin Coroutine 총정리 part1 # launch async Context Job CoroutineScope 오늘은 Kotlin의 Coroutine에 대해서 정리해 보도록 하겠습니다. 1. Coroutine Kotlin에서 네트워크 호출이나 디스크아이오 같은 비동기 코드를 다룰 때 언급되는 것이 Coroutine인데요. 공식문서에서의 Coroutine에 대한 정의를 보면, suspendable한 Computation이라고 나와있습니다. suspend는 중단하다 혹은 유예하다의 뜻 인데요. 필요할 때 마다 suspendable한 단위의 코드들이, suspend 되었다가 다시 깨어나서 resume 하여 과업을 완료한다는 것 입니다. 그리고 Coroutine과 쓰레드는 컨셉적으로는 비슷하지만, 쓰레드는 아닙니다. 한 쓰레드에서 suspend 되었다가, 다른 쓰레드에서 깨어나서 실행될 수 도 있는 좀 더 가볍고 작은 .. 2022. 10. 7.
Kotlin 확장 함수 및 Property 에 대한 정리 # Extension Functions Kotlin을 이용하면 기존 Class와 Interface의 확장이 매우 용이합니다. 오늘은 이러한 확장을 가능하게 하는 중요한 개념인 Extension Functions 와 Extension Property에 대해서 정리해 보겠습니다. 1. Extension Functions 와 Extension Properties 1-1. Extension Functions 와 Extension Properties 여기서 사용된 Extention의 뜻은 확장 또는 연장인데요. Kotlin에서는 Class나 Interface를, 다른 Class나 Interface에서 상속받지 않고도, 함수를 추가하거나 Property를 추가함으로서 확장할 수 있는 능력을 제공해주고 있습니다. 예를 들어서, 만약 Retrofit이나 G.. 2022. 10. 4.
Bitbucket App Passwords 이슈 해결 # Account Sourcetree 오늘은 Bitbucket에서 해결해야할 이슈 한가지에 대해서 정리해 보려고 하는데요. Push를 하면 기존 Bitbucket 패스워드로는 인증이 안되기 시작한 이슈입니다. 오랜 만에 Bitbucket을 사용하시는 분들은 모르실 수 있어서 정리해 보도록 하겠습니다. 1. Push 후 보이는 에러메시지 커밋을 한 다음, SourceTree에서 Bitbucket에 푸쉬를 해보면 다음과 같은 메시지를 볼 수 있습니다. 2022. 9. 18.
HILT 에 대해서 정리해 보겠습니다. # DI Dependency Injection 오늘은 Hilt를 이용한 Dependency Injection에 대해서 정리해 보도록 하겠습니다. Dependency Injection에 대해 경험이 없으신 분들이라면, 아래 글을 통해서 기본적인 개념에 대해서 이해해 보시면 도움이 될 것 같습니다. 특히 Dependency를 주입해준다는 말의 의미에 대해서 이해해 보아야 합니다. >> Dependency Injection(DI)에 대해서 알아보자 이제 DI에 대해서 이해가 가신다면, HILT에 대해서 알아보도록 하겠습니다. 1. HILT HILT는 Google의 Dagger를 기반으로 만든 Dependency Injection 라이브러리인데요. 공식문서에는 Hilt의 목표에 대해서 아래와 같이 정리하였는데요. Kolin이 Kotlin에 특화된 심플한 D.. 2022. 9. 16.
Git 사용방법 총정리 하기 # github branch stash 오늘은 Git을 사용하는 방법에 대해서 총정리해 보도록 하겠습니다. 이 글은 Git을 VSCode 나 Android Studio 혹은 Source Tree같은 IDE나 그래픽 버전관리프로그램의 도움없이도, 기본적인 기능들을 다룰 수 있도록 하는 것을 목표로 작성하였습니다. 1. Git의 설치 1-1. Mac Git의 설치는 MacOS를 기준으로 Homebrew 를 사용하면 편리한데요. Homebrew가 설치되어 있지 않다면, 터미널에서 아래 명령어로 Homebrew를 설치해주면 됩니다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 이제 설치된 homebrew를 이용해서 아래 명령.. 2022. 9. 14.