전체 글 53

냉장고 프로젝트 일기 1

냉장고 특히 냉동고에 들어가면 나올 줄 모르는 검은 봉투들.... 샀는 데 있는지 모르고 또 사는 재료들 바로 우리 엄마를 위한 어플을 만들어 보자 생각을 하게 됐다. 어떻게 만들어 나갔는지 기록해 두고 싶어서 블로그를 쓰기로 했다. (나만의 추억..😄) 우선 새로 앱을 만들면서 공부하거나 공부하고 싶었던 기술들을 넣으면 좋으니까 ! Navigation, Paging, Coroutine (flow), Compose, Hilt 를 우선 사용해 보기로 했다. 생각해 본 기능 및 화면은 이렇다. 1. 기능 및 화면 1-1 스플래쉬 화면 - 재료 목록 리스트(분류 별) 다운로드 - 메뉴 추천이나 오래된 재료 추천을 보여주기 1-2 냉장고 내역 리스트 화면 - 냉장과 냉동이 구분된다 - 분류별로 선택할 수 있다 ..

개발 일기 2023.08.31

[Compose] 컴포즈 공부하기4 - Image (with painter)

컴포즈에서 이미지를 넣는 방법에는 여러 가지가 있다. painter, imageVector, imageBitmap 그리고 인터넷에서 로드할 땐 AsyncImage(coil), GlideImage(glide) Ⅰ. Image Image는 compose 의 Image.kt를 들어가보면 어떤 값을 쓸 수 있는지도 자세히 알 수 있다. (설명은 제외했다) fun Image( bitmap: ImageBitmap, contentDescription: String?, modifier: Modifier = Modifier, alignment: Alignment = Alignment.Center, contentScale: ContentScale = ContentScale.Fit, alpha: Float = Default..

SOLID 원칙을 알아보자 5 : 의존성 역전 원칙 - kotlin

SOLID 원칙이란? Single Responsibility Principle → 단일 책임 원칙 Open-Closed Principle → 개방-폐쇄 원칙 Liskov Substitution Principle → 리스코프 치환 원칙 Interface Segregation Principle → 인터페이스 분리 원칙 Dependency Inversion Principle → 의존성 역전 원칙 Dependency Inversion Principle 의존성 역전 원칙 높은 수준의 코드(모듈)는 낮은 수준의 코드(모듈) 구현에 의존해서는 안된다. 낮은 수준의 모듈보다 높은 수준의 모듈에 의존해야한다. 높은 수준의 모듈은 인터페이스, 추상 클래스라고 생각하면 되고, 낮은 수준의 모듈은 구현된 객체라고 생각하면 된..

[메모리] Heap과 Stack (with Kotlin)

메모리에는 Code, Data, Heap, Stack 4가지 영역이 있습니다. 1. Code (Text) 코드를 실행하기 위해 저장된 영역으로 작성한 프로그램 코드가 저장되는 영역입니다. 저장된 명령어를 CPU에서 하나씩 가져가서 처리를 하게 됩니다. 2. Data 전역변수와 정적변수(Static)가 할당되는 영역입니다. 프로그램 시작과 함께 할당되고 종료되기 전까지 메모리에 남아있습니다. var a : Int = 1 // 초기화된 변수 영역 lateinit var b : String // 초기화 되지 않은 변수 영역 const val c = "Hello" // 정적 변수 (kotlin에는 static을 사용하지 않음) // Java Code---- public static final String C =..

개발 공부/CS 2023.08.24

StateFlow에 대해 알아보자! (with LiveData)

데이터를 관리할 때 특히, MVVM에 보통 사용이 많이 되는 것이 LiveData 입니다. LiveData란? 관찰 가능한 데이터 홀더 클래스 생명주기(Lifecycle)를 인식 하고 있기 때문에 생명주기가 끝나면 바로 메모리상에서 스스로 해제하여 메모리 누수가 일어나지 않습니다. (따로 관리를 할 필요가 없음) 앱 데이터가 변경될 때마다 관찰자가 대신 UI를 업데이트하므로 개발자가 업데이트할 필요가 없어 UI와 데이터의 상태가 일치 됩니다. 이러한 장점도 있지만 단점도 있는데, 안드로이드에서 권장하는 아키텍처 & 클린 아키텍처의 Domain Layer에서는 안드로이드 플랫폼에 독립적이기 때문에 안드로이드 플랫폼에 종속적인 LiveData를 사용하기가 어렵습니다. 즉, UI가 없는 곳에서는 사용하기가 어..

SOLID 원칙을 알아보자 4 : 인터페이스 분리 원칙 - kotlin

SOLID 원칙이란? Single Responsibility Principle → 단일 책임 원칙 Open-Closed Principle → 개방-폐쇄 원칙 Liskov Substitution Principle → 리스코프 치환 원칙 Interface Segregation Principle → 인터페이스 분리 원칙 Dependency Inversion Principle → 의존성 역전 원칙 Interface Segregation Principle 인터페이스 분리 원칙 각 모듈은 자신이 사용하지 않는 것에 의존하면 안 된다. 즉, 자신이 사용하는 메서드에만 의존해야 한다. 인터페이스 분리 원칙 위반 예시 위의 그림을 보면 지렁이와 강아지가 동물을 상속 받고 있습니다. 모든 메서드를 상속받다보니 지렁이는 짖..

Compile과 Android Build

Compile 작성한 고급 언어를(Java, Kotlin 등) 컴퓨터가 읽을 수 있는 기계어(어셈블리어 등)로 변환하는 프로세스 Build 해당 코드를 컴파일 후 apk 파일(실행 파일)로 만드는 것 Build와 실행시 동작 리눅스 기반인 안드로이드는 apk의 일부를 리눅스에서 실행할 수 있는 파일로 한 번 더 컴파일 하고 AOT(Ahead of Time, 선행)로 작업을 한다. 그 후 앱이 실행되면 나머지를 JIT(Just-in-Time, 적기)로 컴파일을 하게 된다. AOT와 JIT로 나눠서 컴파일을 하는 이유는 처음에 전체를 컴파일하게 되면 속도는 빠르지만 그만큼 디스크에 많은 용량을 차지하게 되므로 장단점을 살려 2번 컴파일 하고 있다. 참고 안드로이드 개념) Complie, Build와 Grad..

프로세스와 스레드

프로세스 (Process) 운영체제로부터 자원을 할당받은 작업의 단위 스레드(Thread) 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 프로세스와 스레드를 이해하려면 먼저 프로그램과 프로세스의 차이를 이해해야한다. 프로그램과 프로세스 프로그램 (Program) 어떤 문제를 해결하기 위하여 그 처리 방법과 순서를 기술하여 컴퓨터에 주어지는 일련의 명령문 집합체 즉, 운영체제(OS)가 아직 파일을 메모리에 올리지 않은(실행하지 않은) 정적 상태 ex) 엑셀, 크롬, 카카오톡 등 → 코드로만 이루어진 실행하지 않은 파일 프로세스(Process) 운영체제로부터 자원을 할당받은 작업의 단위 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 ..

개발 공부/CS 2023.08.21

[Compose] 컴포즈 공부하기3 - Row, Column 그리고 정렬

Row - 가로로 추가하고 싶을 때 사용 - XML에서 LinearLayout의 orientation="horizontal" 과 유사 Column - 세로로 추가하고 싶을 때 사용 - XML에서 LinearLayout의 orientation="vertical" 과 유사 Row [예제 1] Row { Text(text = "텍스트 1") Text(text = "텍스트 2") Text(text = "텍스트 3") } 텍스트를 연속으로 넣는다면 이렇게 결과값이 나온다. [예제 2] Row 자체에 크기를 지정해준다면? Row(modifier = Modifier .height(100.dp) .width(300.dp)) { Text(text = "텍스트 1") Text(text = "텍스트 2") Text(text..

SOLID 원칙을 알아보자 3 : 리스코프 치환 원칙 - kotlin

SOLID 원칙이란? Single Responsibility Principle → 단일 책임 원칙 Open-Closed Principle → 개방-폐쇄 원칙 Liskov Substitution Principle → 리스코프 치환 원칙 Interface Segregation Principle → 인터페이스 분리 원칙 Dependency Inversion Principle → 의존성 역전 원칙 Liskov Substitution Principle 리스코프 치환 원칙 서브 타입이 상위 타입을 변경 없이 치환할 수 있어야하며, 치환해도 정상적으로 동작해야한다. [예제 코드] open class Rectangle { open var width = 0 open var height = 0 fun getArea() :..