본문 바로가기

분류 전체보기81

[Computer Science] 여러가지 자료구조에 대해 알아보자 # 자료구조란? 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.# 자료구조의 분류자료 구조에는 단순 자료 구조과 복합 자료 구조으로 나뉘며 복합 자료 구조에서는 다시 선형 자료 구조 및 비선형 자료 구조로 분류가 된다. # 선형 자료 구조데이터가 순차적으로 나열되어 있으며, 각 요소가 하나의 다음 요소와 직접적으로 연결되어있는 구조 이러한 특징으로 인해 인덱스를 통한 접근이 용이하고 순회가 쉽다.선형 자료 구조에는 여러 하위 구조들이 존재하는데 이들은 대표적으로 다음과 같다. 1. 배열동일한 데이터 타입의 요소들을 연속적인 메모리 공간에 저장접근시 Index 를 사용하므로 O(1)삽입/삭제시 요소 이동으로 인해 O(n)검색시 정렬되지 않은 배열의 경우 순차 탐.. 2025. 2. 23.
[안드로이드] DI 를 하는 이유와 Hilt 와 Koin 의 차이에 대해 알아보자 # DI 란?의존성 주입 (Dependency Injection) 의 줄임말.A 객체가 B 객체의 기능을 사용해야 한다면 A는 B에 의존하는 관계인데, 이러한 객체 간의 의존 관계를 외부에서 설정하고 주입하는 디자인 패턴이다.  위의 이미지로 예시를 들어보자Car class 의 내부에서 Engine class 를 사용해야 하므로 이 둘은 의존 관계이다. 이를 코드로 나타내보면 다음과 같다.class Engine { fun start() = println("the car moves forward")}class Car { private val engine = Engine() fun start() { engine.start() }}fun main() { val car =.. 2025. 2. 22.
[Jetpack Compose] Mockk + Hilt.test 라이브러리를 활용하여 UI Test 를 진행해보자. 흔히 TDD (Test-Driven  Development) 나 BDD (Behavior-Driven Development)라고 말하는 개발 방법을 알고 있을 것이다.테스트 기법 중 하나인데, 이러한 테스트를 진행하기 위해서 우리는 Unit Test, UI Test, Integration Test 등을 진행해야한다. Integration Test 의 경우 실제 앱 환경과 동일하게 전체 모듈을 아우르는 App Module 에서 테스트를 진행하면 되므로 의존성 관련 문제가 없겠지만, 각 모듈별로 테스트를 진행해야하는 Unit Test, UI Test 에서는 의존성 문제가 생길 때가 많다. Android Clean Architecture 로 예를 들자면 Presentation -> Domain 의존 관계를 .. 2025. 2. 21.
[Computer Science] 프로그램의 메모리 구조에 대해 알아보자 (Code, Data, Stack, Heap) # 프로그램 실행1. 프로그램 실행 요청을 전달받는 경우2. 운영체제가 프로그램의 정보를 읽어 메모리에 로드하고3. CPU 가 코드 영역, 데이터 영역의 데이터를 읽고 이를 실행한다. # 코드 구조이러한 메모리의 구조는 아래 이미지와 같이 4가지로 이루어진다.  메모리는 주소가 낮은 방향(0x0000…)에서 높은 방향(0xFFFF…)으로 증가하는 방식으로 구성이 되는데, 위의 이미지를 보면 코드와 데이터, 힙 영역의 경우 낮은 주소 -> 높은 주소로 증가한다.스택 영역은 반대로 높은 주소 -> 낮은 주소로 감소한다.의 특징을 알 수 있다. # 왜 스택만 높은 주소에서 낮은 주소로 감소할까?이에 대해 설명하기 위해 우선 각 메모리 영역 별 특징을 설명하려고 한다. 1. 코드 영역컴파일된 실행 코드(바이트코.. 2025. 2. 20.
[Computer Science] 프로그래밍 패러다임에 대해 알아보자. 우리가 명령형 프로그래밍과 선언형 프로그래밍을 알기 전 프로그래밍 패러다임을 우선 알고 가는 시간을 가져보도록 하자.# 프로그래밍 패러다임이란?프로그래밍이나 소프트웨어 개발에 접근하는 특정한 방식, 철학, 또는 관점즉, 특정한 사고방식과 접근법을 기반으로 코드를 작성하는 방법론을 의미한다.  이러한 프로그래밍 패러다임에는 크게 명령형 프로그래밍, 선언형 프로그래밍 기법으로 나뉜다.# 명령형 프로그래밍 (Imparative Progamming) 이란?어떻게 (How) 해야할지 직접 기술하는 방식.즉, 개발자가 코드를 하나씩 모두 구현하는 방식으로 내부 구현을 모두 알고 있으므로, 추상화가 되어 있지 않다고 볼 수 있다. 명령형 프로그래밍에는 절차형 프로그래밍, 구조적 프로그래밍, 객체 지향형 프로그래밍이 .. 2025. 2. 19.
[Kotlin] Class 와 Data class 에 대해서 알아보고 Equals 의 작동 원리에 대해서 알아보자 # Class 란?객체를 생성하기 위한 기본적인 설계도(템플릿) 역할을 하며, 객체(인스턴스) 를 만들고 그 안에서 프로퍼티와 메소드를 정의한다. # Data class 란?데이터를 다루기 위해 생성되는 클래스로 Class 에서는 기본적으로 구현해주지 않는 equals(), hashCode(), toString(), copy(), ComponenetN() 기능을 자동 생성한다. 여기서 copy() 는 data class 자기 자신을 새롭게 복사하여 새로운 객체로 생성하는 함수이고, componentN() 의 경우 객체의 프로퍼티를 분해하여 변수에 할당할 수 있도록 설정하는 기능이다. equals(), hashCode(), toString() 에 대해 조금 더 깊은 이야기는 아래에서 설명하도록 하겠다.# .. 2025. 2. 18.