Home
흔한 앱 개발자 고딩
Cancel

안드로이드 이미지 뷰 뒤집기

안드로이드 앱 개발을 하다보면 ImageView에 이미지를 뒤집고 싶을 때가 있다 물론 두 가지 이미지를 사용할 수도 있겠으나 이 방법이 싫다면 scale를 사용해보자 구현 방법 구현 방법은 매우 간단한데 Kotlin으로는 아래와 같고 좌우 binding.imageView.scaleX = -1f 상하 binding.imageView.sca...

MIME 타입이란 무엇일까?

개발을 하다보면 */*와 같은 문자를 보게 되는 순간이 있을텐데 이는 MIME(Multipurpose Internet Mail Extensions) 타입이라고 불리며 파일의 유형을 식별하기 위해 사용되는 표준 메커니즘이다 이번 글에서는 이러한 MIME 타입이 무엇이며 MIME 타입에 종류에 대해 알아보겠다 MIME 타입이란? MIME 타입은 전자 ...

안드로이드 기기에서 파일 가져오기

안드로이드 앱 개발을 하다보면 해당 기기에 있는 파일을 불러오고 싶을 때가 있다 예를 들면 사진이나 동영상 등 말이다 이번 글에서 이러한 기능을 구현하는 방법을 짧고 간단히 알아보겠다 우선 해당 기능을 구현하는 방법은 크게 이전에 사용하던 방법과 최근 방식 이렇게 두 가지로 나눌 수 있다 일단은 이전 방식부터 차근 차근 알아보자 구현 방법 아래 ...

안드로이드 Splash Screen API 제거

안드로이드 앱 개발을 하다보면 과거와 달리 안드로이드 12에서 새로 생긴 Splash Screen API 때문에 불편할 때가 있다 이번 글에선 해당 기능을 제거 법에 대해 간단히 설명하겠다 구현 방법 제거 방법은 매우 간단한데 res/values/styles.xml 파일에서 <style name="Base.Theme.Test" parent=...

안드로이드 클립보드 복사하기

안드로이드 앱 개발을 하다보면 특정 텍스트를 유저 클립보드에 복사시키고 싶을 때가 있다 이번 글에선 해당 기능을 구현하는 법에 대해 간단히 설명하겠다 구현 방법 구현 방법은 매우 간단한데 Kotlin으로는 아래와 같고 fun clipboardCopy(text: String) { val clipboardManager = getSystemSe...

IPv4와 IPv6의 IP 전송 방식

정보처리기능사 실기를 공부하다보면 네트워크 파트에서 IP 전송 방식에 대해 보게 될 것인데 개인적으로 난 네트워크가 제일 어려웠던 것 같다 그래서 이번 글에서는 네트워크와 아예 동떨어진 사람들을 위해 IPv4와 IPv6의 IP 전송 방식의 정의 및 방식을 비교하고 각각의 특징과 차이점을 쉽게 알아보러 한다 IPv4란 무엇일까? IPv4(Intern...

안드로이드 Failed to build unique file /storage/emulated/0/Pictures Title image/jpeg Android 10 오류 해결 방법

문제 상황 안드로이드에서 특정 실기기에서 카메라를 사용하던 중 오류가 발생하여 앱이 강제 종료되는 문제가 발생했다 java.lang.IllegalStateException: Failed to build unique file: /storage/emulated/0/Pictures image image/jpeg 에러 메세지는 위와 같았으며 문제가 생...

안드로이드 기본 카메라 사운드 재생 방법

안드로이드 앱 개발을 하다보면 카메라 기본 사운드를 출력해야 할 때가 있는데 없을 거 같지만 나도 이런 일이 있을 줄 몰랐기에 일단 설명해보겠다 구현 방법 구현 방법은 매우 간단한데 Kotlin으로는 아래와 같이 할 수 있으며 val sound = MediaActionSound() sound.play(MediaActionSound.SHUTTER_...

데이터베이스 정규화 과정

정보처리기능사 실기를 공부하다보면 데이터베이스 파트에서 정규화 과정에 대해 보게 될 것인데 이 파트가 데이터베이스 파트 3대장 중 하나로 외우기 힘들다 이번 글에서는 이러한 데이터베이스 3대장 중 하나인 데이터베이스 정규화 과정에 대해 알아보겠다 데이터베이스 정규화란? 데이터베이스 설계에서 정규화(Normalization)는 데이터를 구조화하여 중...

에러, 휴먼 에러, 결함의 차이점

정보처리기능사 기출을 풀다보면 애플리케이션 테스트 파트 문제에서 에러, 휴먼 에러, 결함에 대한 문제를 보게 될 것이다 이 셋은 얼핏 보면 서로 비슷해서 구분하기 쉽지 않은데 오늘은 이러한 에러, 휴먼 에러, 결함의 차이점에 대해 알아보겠다 에러 (Error) 정의 에러는 시스템이 기대한 결과와 실제 결과가 불일치하는 상태를 의미하며 소프트웨어나...

네트워크 장비의 종류와 역할

정보처리기능사 실기를 공부하다보면 네트워크 파트에서 세 가지 장벽을 만나게 될 것이다 그 중 OSI 7계층과 프로토콜을 이전 글들에서 설명했으니 이번 글에서는 남은 네트워크 장비에 대해 알아보겠다 네트워크 장비는 다양하지만 이번 글에서는 정보처리기능사에서 자주 나오는 허브, 리피터, 라우터, 브리지, 스위치, 게이트웨이에 대해 집중적으로 살펴보려고 한...

SQL의 CASCADE란?

정보처리기능사 실기 기출을 풀다보면 CASCADE라는 명령어를 자주 마주치게 될 것이다 본인 또한 정보처리기능사를 공부할 때는 시간이 얼마 없어 그냥 종속된 테이블에서 무엇을 하면 CASCADE라고 외웠는데 그렇기에 이번 글에서는 이러한 SQL에서 자주 사용되는 CASCADE 명령어에 대해 알아보겠다 CASCADE란? CASCADE는 주로 외래 키...

Java의 문자열 관련 함수들

Java의 문자열 관련 함수들 length 함수 (문자열 길이) length 함수는 문자열의 길이를 반환한다 String str = "Hello, World!"; int length = str.length(); System.out.println("문자열의 길이는 " + length + "입니다."); 문자열의 길이는 13입니다. charA...

SQL의 집합 연산자

SQL에서 집합 연산자는 두 개 이상의 쿼리 결과를 하나로 합치거나 공통된 부분을 찾거나 차집합을 구하는데 사용되는 것으로 이번 글에서는 UNION, UNION ALL, MINUS, INTERSECT의 개념과 예제에 대해 설명하겠다 1. UNION UNION 연산자는 두 개의 쿼리 결과를 합친 후 중복된 행을 제거하는 집합 연산자로 각 쿼리는 동일...

SQL의 Drop, Truncate, Delete 차이와 개념

오늘은 SQL에서 자주 사용하는 명령어인 DROP, TRUNCATE, DELETE에 대해 알아보려고 하는데 해당 명령어들은 모두 데이터를 삭제하는데 사용되지만 각각의 기능과 사용 목적이 조금씩 달라 헷갈리는 점이 많다 각각에 대해 예제와 함께 간단히 알아보자 1. DROP DROP 명령어는 데이터베이스 객체(테이블, 데이터베이스 등)를 완전히 삭제...

데이터베이스 무결성의 개념 및 종류

데이터베이스 무결성(Database Integrity)은 데이터베이스에 저장된 데이터가 정확하고 일관되며 신뢰할 수 있도록 보장하는 개념으로 이에 따라 다양한 제약 조건이 있는데 각각의 무결성 유형들은 데이터의 특정 측면을 보호하는 역할을 한다 이번 글에서는 대표적인 무결성 제약 조건인 개체 무결성, 도메인 무결성, 참조 무결성, 사용자 정의 무결...

SQL의 내부 조인(INNER JOIN)과 외부 조인(OUT JOIN) 개념과 차이점

데이터베이스 관리 시스템(DBMS)를 공부하다보면 맞닥뜨리게 되는 조인(join)은 여러 테이블에 걸친 데이터를 결합하여 하나의 결과 집합으로 만드는 중요한 작업으로 꼭 알아야 되는 개념이다 이러한 조인에는 여러 종류가 있지만 그 중에서도 가장 많이 사용되는 것은 INNER JOIN과 OUTER JOIN이다 이번 글에서는 이러한 INNER JOIN과...

Java의 수학 관련 함수들

Java의 수학 관련 함수들 pow 함수 (제곱) pow 함수는 주어진 base를 exponent만큼 제곱한 값을 반환하는 함수이다 double base = 2.0; double exponent = 3.0; double result = Math.pow(base, exponent); System.out.println(base + "의" + expo...

C언어의 문자열 관련 함수들

c언어의 문자열 관련 함수들 strlen 함수 (문자열 길이) size_t strlen(const char *str); strlen 함수는 주어진 문자열의 길이를 반환하는 함수이다 여기서 문자열의 끝을 나타내는 null 문자('\0')는 포함되지 않는다 #include <stdio.h> #include <string.h>...

C언어의 수학 관련 함수들

c언어의 수학 관련 함수들 pow 함수 (제곱) double pow(double base, double exponent); pow 함수는 주어진 base를 exponent만큼 제곱한 값을 반환하는 함수이다 #include <stdio.h> #include <math.h> int main() { double bas...

SQL의 DDL, DML, DCL이란 무엇일까?

CS를 공부하다보면 데이터베이스 파트에서 DDL, DML, DCL을 마주하게 된다 이는 데이터베이스 관리 시스템(DBMS)에서 사용하는 SQL 명령어들을 분류한 것인데 이들은 각각 특정한 목적과 기능을 가지고 있다 DDL (Data Definition Language) 데이터베이스의 구조를 정의하고 수정하는 데 사용되는 명령어들로 테이블, 인덱스,...

정보처리기능사 윈도우 주요 단축키

정보처리기능사 실기 문제에서 매번 1개씩은 꼭 등장할 정도로 자주 등장하는 문제 유형으로는 윈도우 단축키가 있는데 오늘 글에서는 이러한 윈도우 주요 단축키에 대해 모아서 요약 정리하려고 한다 주요 단축키 목록 윈도우 + V: 클립보드 윈도우 + U: 접근성 윈도우 + Shift + S: 화면 캡처 윈도우 + S: 검색 윈도우 +...

TCP/IP 4계층이란 무엇인가?

개발자를 지망하거나 개발 관련 내용을 찾아보다 보면 TCP/IP 4계층이라는 말을 한 번쯤 들어봤을 것이다 이러한 TCP/IP 4계층은 인터넷 통신의 기본 프로토콜로 네트워크 통신이 어떻게 이루어지는지 이해하는 데 중요한 개념이다. 이번 글에서는 이러한 TCP/IP 4계층에 대해 자세히 다뤄보겠다 TCP/IP 4계층이란? TCP/IP(Transmis...

안드로이드 DataBindingComponent 관련 오류 해결 방법

문제 상황 안드로이드에서 DataBinding을 추가하여 사용하던 중 오류가 발생하였다 오류 메세지는 대충 cannot access DataBindingComponent super(_bindingComponent, _root, _localFieldCount); ^ class file for androidx.databinding.DataBinding...

안드로이드 Android.support.v4.app.INotificationSideChannel 중복 클래스 오류 해결 방법

문제 상황 안드로이드에서 라이브러리를 추가하던 중 오류가 발생하였다 오류 메세지는 대충 (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0) Duplicate class android.support.v4.app.INotificationSideCha...

Flutter LateInitializationError Field 변수 has not been initialized 오류

문제 상황 Flutter에서 위젯들을 이용해 화면을 구성하던 중 LateInitializationError Field 변수 has not been initialized 위와 같은 오류가 발생하였다 해결법 해당 문제 해결하는 방법은 생각보다 간단한데 바로 late로 선언된 변수를 초기화하면 된다 이 문제의 원인으로는 late로 변수를 선언 ...

Flutter TextField 숫자만

Flutter에서 사용자에게 무언가를 입력받을 때는 TextField를 사용하게 되는데 이러한 TextField에다가 사용자가 숫자만 넣게 하고 싶을 때가 있다 keyboardType: TextInputType.number, 그렇 때는 TextField keyboardType에 TextInputType.number을 넣어주면 된다

Flutter the constructor being called isn't a const constructor 오류

문제 상황 Flutter에서 위젯들을 이용해 화면을 구성하던 중 the constructor being called isn't a const constructor 위와 같은 오류가 발생하였다 해결법 해당 문제 해결하는 방법은 생각보다 간단한데 바로 잘못된 const를 제거하면 된다 이 문제의 원인으로는 const는 컴파일 타임에 결정하지만...

Dart 범위 제한 함수

프로그래밍을 하다보면 특정 값에 범위를 제한하고 싶을 때가 있다 이때 여러 방법으로 이를 처리할 수 있겠지만 Dart에서는 clamp 함수를 이용하여 값을 특정 범위로 쉽게 제한할 수 있는데 value.clamp(min, max) 이 함수는 주어진 값이 최소값과 최대값 사이에 속하지 않으면 최소값 또는 최대값으로 값을 제한한다 여기서 value...

안드로이드 No type arguments expected for class Call 에러

문제 상황 안드로이드에서 Retrofit2를 사용해서 RetrofitAPI interface를 생성하던 중 Call 부분에서 자꾸만 오류가 발생하였다 import android.telecom.Call import retrofit2.http.GET import retrofit2.http.Query interface RetrofitAPI { ...

Java의 StringBuffer란 무엇일까?

Java나 Kotlin 등을 사용하는 안드로이드 앱 개발에서 성능과 효율성을 고려해야 할 때는 StringBuilder나 StringBuffer 클래스를 사용해야 하는데 이번 글에서는 이러한 클래스 중 아직 다루지 않은 StringBuffer에 대해 자세히 알아보겠다 StringBuffer란? StringBuffer는 Java에서 변경 가능한 문자...

Java의 StringBuilder란 무엇일까?

안드로이드 앱을 개발하거나 자바나 Kotlin 개발을 하다 보면 문자열을 다루는 경우가 많은데 이때 성능과 효율성을 고려해야 할 때가 있을 것이다 이러한 상황에서 자주 사용되는 클래스 중 하나가 바로 StringBuilder라는 녀석인데 이번 글에서는 이러한 StringBuilder에 대해 자세히 알아보도록 하겠다 StringBuilder란? St...

Python의 pass란 무엇일까?

만약 Python을 간단하게 사용하거나 아직 기초만 배우는 중이라면 모르겠지만 Python에서는 pass라는 키워드가 있다 pass는 Python에서 사용되는 특별한 키워드로 이번 글은 이러한 pass에 대해 알아보려고 한다 pass란? Python에서 pass는 아무것도 수행하지 않음을 의미하는 키워드로 코드 블록 내에서 어떠한 동작도 하지 않을...

Java의 BufferedReader란 무엇일까?

안드로이드 개발 중 큰 용량을 가진 파일 읽기를 구현하다보면 필연적으로 문제가 발생하고 이를 해결하다가 BufferedReader에 대해 알게 될 것이다 이렇듯 큰 용량을 가진 파일 읽기에서 BufferedReader는 중요한 역할을 하는데 이번 글에선 이러한 BufferedReader에 대해 알아보겠다 BufferedReader란? Buffere...

깃허브 블로그 Ruby Bundle Exit Code 5 오류 해결법

문제 상황 잘 쓰던 깃허브 블로그가 어느 순간 이러한 페이지만 뜨며 접속이 안되는 문제가 생겼다 그래서 어떤 문제가 있나 찾아보다가 이렇게 Error: The process ‘/opt/hostedtoolcache/Ruby/3.3.0/x64/bin/bundle’ failed with exit code 5 라는 오류 메시지가 발생한다는 걸...

OSI 7 계층이란 무엇인가?

개발자를 지망하거나 개발 관련 내용을 찾아보다보면 OSI 7 계층이란 말을 한번 씩을 들어봤을 것이다 이러한 OSI 7 계층은 통신이 어떻게 작동하는지 이해하는데 도움이 되는 핵심 개념으로 꼭 알고 있어야 할 상식이기에 이번 글에서 다뤄보겠다 OSI 7 계층이란? 우선 OSI(Open Systems Interconnection) 모델에 대해 알아보...

알고리즘 문제 풀이에서 빅오 표현법과 시간 복잡도란 무엇일까?

알고리즘 문제를 풀거나 알고리즘 문제를 풀다가 막혀서 다른 사람의 풀이를 볼 때 자주 들리는 단어들이 있을 것이다 그 중 우리는 오늘은 알고리즘 문제 풀이에서 중요한 개념인 ‘빅오 표현법’과 ‘시간 복잡도’에 대해 설명하려고 한다 빅오 표현법(Big O Notation)이란? 우선 빅오 표현법에 대해 먼저 알아보면 빅오 표현법이란 알고리즘의 효율성...

구간 합 알고리즘 - 세그먼트 트리

알고리즘 문제에서 종종 배열이나 리스트 내 특정 구간의 원소들의 합을 계산해야 할 때가 있을 것이다 이럴 때 쓰이는 알고리즘을 구간 합이라고 한다 이러한 구간 합 알고리즘에는 크게 누적 합 배열(prefix sum array)과 세그먼트 트리(segment tree)가 존재하는데 이번 글에선 배열의 값이 변경되는 경우에도 사용할 수 있는 세그먼트 트...

구간 합 알고리즘 - 누적 합 배열

알고리즘 문제에서 종종 배열이나 리스트 내 특정 구간의 원소들의 합을 계산해야 할 때가 있을 것이다 이럴 때 쓰이는 알고리즘을 구간 합이라고 한다 이러한 구간 합 알고리즘에는 크게 누적 합 배열(prefix sum array)과 세그먼트 트리(segment tree)가 존재하는데 이번 글에선 이 중 그나마 이해하기 쉽다고 생각되는 누적 합 배열에 대...

Kotlin에서 Long보다 큰 수를 연산하려면?

안드로이드 개발 중 초보가 처음으로 할만한 프로젝트를 고른다면 꼭 나오는 것 중 하나가 계산기 앱이다 하지만 계산기 앱을 개발하다보면 Long으로도 커버가 되지 않을 만큼 큰 숫자를 연산해야 할 일이 생기는데 이것을 계산할 수 있는 숫자를 제한하는 방법으로도 해결할 수 있지만 이는 근본적인 해결 방법이 아니기에 제외하고 뭐 이 밖에도 종종 Kotli...

C++ 프로그램 종료하기

C++을 사용하면서 코딩을 하다보면 프로그램을 종료해야 할 때가 있을 것이다 보통은 프로그램이 순차적으로 실행되면서 마지막으로 return 0; 만나게 되면 끝이 나지만 이렇게만 프로그램을 종료해야 한다면 다양한 상황에서 요구 조건에 따라 종료해야 할 때 불편함과 문제가 생길 것이다 그래서 C++은 다양한 종료 방법을 제공하고 있는데 이번 글에...

C++ 제네릭 함수란?

C를 사용하다가 C++로 넘어와서 공부를 시작한 사람이라면 알겠지만 C++은 C와 비슷하지만 C에서 불편한 점들을 개선하거나 바꾼 여러 기능들이 추가적으로 탑재되어 있다 이번 글에서 그 중 특정 상황에서 함수를 작성할 때 코드 재사용성을 매우 높일 수 있는 C++의 제네릭 함수에 대해 소개하려고 한다 제네릭 함수란? 우선 제네릭 함수란 다양한 데이...

C++ Enum 클래스 VS enum

C++을 사용하더보면 Enum 클래스를 만나게 되는데 Enum 클래스는 열거형 타입을 더욱 편하게 다룰 수 있게 해주는 C++의 기능이라고 생각하면 쉽다 이번 글에서는 이러한 Enum 클래스에 대해 소개해보겠다 Enum 클래스란? 앞서 말했다시피 Enum 클래스는 기존의 C나 C++의 열거형보다 더 편하고로 열거형을 정의할 수 있게 해주는 기능으로...

C++의 클래스에 대해 알아보자!

많은 사람들이 프로그래밍을 배우기 위해 언어를 선택할 때 요즘은 주로 파이썬(Python)을 배우지만 과거에 프로그래밍을 접했거나 좀 더 클래식하게 근본을 위해 C부터 시작하는 사람도 많을 것이다 그러게 되면 보통 C만 배우고 끝내지 않고 C++까지 배우는 경우도 많은데 보통 C를 배우다가 C++를 배우다보면 대부분 C와 유사하지만 C에는 없는 C+...

모듈러 연산이란 무엇일까?

코딩 테스트 준비를 위해 알고리즘 문제들을 풀다보면 수학적 논리가 필요한 문제를 마주치게 된다 이번 글에선 이럴 때 필요한 수학적 논리 중 개인적으로 가장 처음에 맞닥드린 모듈러 연산에 대해 알아보려 한다 모듈러 연산이란? 모듈러 연산은 수학에서 중요한 개념으로 연산 결과를 특정한 값으로 나눈 나머지를 구하는 것을 의미하는데 주로 정수들 간의 산술...

깃허브 지킬 블로그 태그 및 카테고리 이동 문제

문제 상황 카테고리와 태그 C++과 C 두 개가 있으나 카테고리 탭과 태그 탭에서 C++을 눌러도 C 그룹으로 이동되고 C를 눌러도 C 그룹으로 이동되는 문제가 발생하였다 해결법 문제의 원인을 찾기 위해 주소를 살펴보니 지킬 블로그에서는 https://이름.github.io/categories/카테고리 이름/ https://이름.github.io...

C++에서 연관된 두 가지 이상의 자료를 저장하려면?

C++을 사용해서 코딩을 하다보면 어느 순간 연관된 두 가지 이상의 자료를 하나로 그룹화하여 저장하고 싶을 때가 있을 것이다 그럴 땐 사용할 수 있는 것이 바로 C++의 pair와 tuple로 이번 글에선 이 두 구조체에 대해 알아보려고 한다 pair란? pair는 C++에서 두 개의 요소를 저장할 수 있는 구조체로 보통 두 데이터가 논리적으로 연...

C++ 범위 기반 for문이란?

C++을 배우거나 사용하다가 다른 사람이 작성한 코드를 보다 보면 내가 쓰는 일반적인 for문이랑 다르게 더 간결하고 편리한 for문을 사용하는 것을 볼 수 있다 그래서 이번 글에선 이러한 편리한 for문을 사용하는 법에 대해 알아보려고 한다 범위 기반 for문 C++에서 남들이 사용했던 더 간결하고 편리해보이던 이러한 for문의 정확한 명칭은 ...

C++ printf에서 string 출력하기

C++을 사용하다 보면 문자열을 사용할 때 char[]보다는 string 클래스가 문자열을 편리하게 다룰 수 있어 주로 사용하게 되는데 string과 printf 함수를 함께 사용해보면 알겠지만 printf에서 string을 사용하면 오류가 발생한다 그렇기에 블로그 글에서는 string이 printf로 출력되지 않는 이유와 이를 해결하는 방법에 대해...

C++의 auto란 무엇일까?

C를 쓰다가 C++을 배우게 되면 C에서 쓰지 않은 생소한 것들이 있을 것이다 이번 글에선 그 중 auto 키워드에 대해 알아보려고 한다 auto 키워드란? auto 키워드는 C++11부터 도입된 키워드로 이전에 C 언어에서 사용되었던 거의 의미 없는 키워드였던 auto가 C++에서는 타입 추론 도구로 재탄생하였다 자동 타입 추론(Automati...

C++ size, length, sizeof 함수들은 뭐가 다를까?

C++을 사용하다 보면 배열이나 백터, 문자열 등등에 사이즈를 알기 위해 여러 함수들을 사용하게 되는데 이 중 size(), sizeof(), length() 함수들이 데이터들의 크기를 다루는데 자주 사용되지만 비슷해 보이는 이 함수들도 그 용도와 반환 값이 상이하다 나 또한 함수들을 헷갈려 해서 이번 글에서 이러한 함수들에 대해 알아보고 차이점을 ...

C++ "#define"이란 무엇일까?

C나 C++을 공부하다보면 #define에 대해 알게 될 것이다 또한 남에 코드를 봐도 #define를 사용하는 코드를 자주 마주치게 되는데 이번 글에선 이러한 #define에 대해 무엇이고 어떤 기능을 하는지 알아보려고 한다 define이란? #define은 C와 C++ 프로그래밍 언어에서 사용되는 프리프로세서 지시어로 참고로 여기서 프리프로세서...

C++ 특정 범위 문자열 출력

C++을 사용하다보면 문자열을 특정 문자열의 문자열만 출력하고 싶은 경우가 있다 이번 글에선 문자열의 특정 범위를 출력하는 법에 대해 알아볼 것이다 substr 메서드 사용하기 문자열의 특정 범위를 출력하는 방법은 크게 세 가지가 있는데 첫 번째로는 std::string 클래스의 substr 메서드를 사용해서 출력하는 방법을 알아볼 것이다 #in...

main 함수는 왜 int 타입일까?

C나 C++을 배웠거나 printf(“Hello World”)처럼 한번이라도 맛본 사람이라면 알텐데 C와 C++은 main 함수에서 시작된다 이것은 여타 다른 언어들도 비슷하니 별 생각이 들지 않지만 문득 왜 C와 C++에서 main 함수의 타입은 int로 정수를 리턴할까? 라는 궁금증이 생겨 다른 사람도 혹시 이런 궁금증을 가지지 않을까? 라는 생...

Kotlin의 Array에 대해 알아보자

안드로이드 개발이나 서버 개발 등 다양한 곳에서 코틀린을 사용하여 개발을 하다보면 다른 언어와 달리 코틀린에선 Array와 List는 딱히 구분 없이 사용하는 것 같고 특별히 다른 점도 모르겠는데? 하며 구분 없이 사용하는 사람들이 있을 것이다 나 또한 그랬기에 이번 글을 시작으로 코틀린의 Array와 List, MutableList와 ArrayLi...

인공지능 및 빅데이터 분석 용어 정리

현재 A.I 및 빅데이터 분석을 하다보면 모르는 영단어로 된 용어가 지속적으로 등장하면 곤욕을 치를 때가 있다 그래서 이번 글에선 A.I 및 빅데이터 분석에서 자주 등장하는 용어들을 정리해볼 것이다 Size (전체 수치) Size (전체 수치)는 데이터 세트의 전체 크기나 개수 Distinct (고유 값) Distinct (고유 값)는 데이터 ...

SQL 기본 문법 3

SQL 기본 문법 제약 조건 ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (열명); 제약 조건은 데이터 무결성을 보장하기 위해 테이블의 열에 적용되는 규칙이나 제한을 의미하며 이를 통해 데이터의 정확성, 일관성 및 신뢰성이 유지된다 테이블 레벨 제약 조건 CREATE TABLE 테이블명 ( 열1 데이터...

프로그래밍에서 시퀀스란 무엇일까?

프로그래밍을 배우다 보면 지속적으로 시퀀스라는 개념이 등장하는데 그렇다면 이 시퀀스가 무엇이고 왜 사용하는지에 대해 궁금증이 생길 것이다 나 또한 그랬기에 그래서 이번 글에선 이러한 시퀀스에 대해 알아볼 것이다 시퀀스란? 프로그래밍에서 시퀀스는 일련의 요소들이 순서대로 나열된 것을 의미하는데 이러한 시퀀스가 될 수 있는 요소들로는 숫자, 문자, 또...

Gradle 빌드 파일 방식 Groovy와 KTS의 차이

안드로이드 앱 개발을 하다가 안드로이드 스튜디오를 보다 보면 Gradle의 빌드 파일은 주로 Groovy DSL (Domain-Specific Language) 과 Kotlin DSL (KTS)을 사용하여 작성되는데 이번 글에선 Gradle 빌드 파일 방식들인 Groovy와 KTS의 대해서 알아보려고 한다 Groovy Groovy는 Java 플랫폼...

안드로이드 스튜디오에서 마주치던 Gradle은 무엇일까?

안드로이드 앱 개발을 하다가 안드로이드 스튜디오를 보다 보면 Gradle 이란 걸 마주할 수 있는데 그 때마다 Gradle이 도대체 무엇일까?라는 의문을 가졌었는데 그래서 이번 글에선 Gradle이 무엇인지에 대해 알아보려고 한다 Gradle이란? Gradle이란 무엇일까? Gradle은 Java, Scala, Android 및 Kotlin을 포함...

Groovy란 무엇일까?

안드로이드 앱 개발을 하다가 안드로이드 스튜디오를 보다 보면 Gradle 스크립트가 무엇으로 작성되어 있는지 궁금할 때가 있을 것이다 이것이 비슷하긴 하지만 Kotlin도 이니고 Java도 아닌 무언가인데 그렇다면 이건 무엇일까? 바로 이것이 Groovy이란 언어로 이번글에선 이러한 Groovy에 대해 알아볼 것이다 Groovy이란? 우선 Gro...

안드로이드 ItemDecoration이란?

안드로이드 앱 개발에서 RecyclerView는 데이터 목록을 효율적으로 표시하는데 자주 사용되는 뷰로 이러한 RecyclerView의 사용자 인터페이스를 바꾸는데 사용할 수 있는 ItemDecoration에 대해 Kotlin 언어를 사용하여 알아보려고 한다 ItemDecoration이란? 우선 ItemDecoration에 대해 자세히 알아보자 ...

Kotlin의 데이터 클래스와 씰드 클래스에 대해 알아보자

코틀린은 안드로이드 개발을 포함한 다양한 영역에서 널리 사용되는 현대적인 프로그래밍 언어로 데이터 클래스(data class)와 씰드 클래스(sealed class)를 지원하는데 이 두 클래스 유형은 코틀린 프로그래밍 언어에서 중요한 역할을 한다 그렇기에 오늘 글에서는 이 두 개념에 대해 자세히 알아보자 데이터 클래스(Data Classes) 코...

Kotlin의 오브젝트와 컴페니언 오브젝트에 대해 알아보자

코틀린은 안드로이드 개발을 포함한 다양한 영역에서 널리 사용되는 현대적인 프로그래밍 언어로 현대적 언어답게 정적 멤버와 싱글톤 패턴을 간결하게 표현하는데 유용한 오브젝트(Object)와 컴페니언 오브젝트(Companion Object)가 존재한다 오늘 글에서는 이 두 개념에 대해 자세히 알아보겠다 오브젝트(Object) 코틀린의 오브젝트는 싱글톤...

Python EOFError 오류와 알고리즘 풀이 시 개수가 정해지지 않은 입력 처리

Python EOFError 오류란? Python에서 발생하는 EOFError 오류란 “End Of File Error”의 약자로 파일의 끝에 도달했을 때 더 이상 읽을 내용이 없을 때 발생하는 에러이다 알고리즘 풀이 시 개수가 정해지지 않은 입력 처리 그렇다면 알고리즘 풀이 시 개수가 정해지지 않은 입력을 받아야 할 때는 어떻게 처리해야 할까?...

C언어 파일 입출력

C언어에서 파일 입출력을 하기 위해서는 생각보다 어려운 작업이 필요없다 바로 코드로 확인해보자 파일 읽기 #include <stdio.h> int main() { FILE *file; // 파일 포인터 선언 char ch; // 파일 열기 시도 file = fopen("example.txt", "r"); ...

Kotlin lateinit과 lazy

코틀린은 안드로이드 개발을 포함한 다양한 영역에서 널리 사용되는 현대적인 프로그래밍 언어로 현대적 언어답게 초기화 지연을 지원한다 여기서 초기화 지연은 말 그대로 객체의 초기화를 늦게 하는 것으로 var age: Int? = null 위 코드처럼 age라는 변수를 사용하는데 처음에는 age에 값을 모르고 나중에 설정할 예정일 때 만약 이 age를...

안드로이드 에뮬레이터 한국어 설정

안드로이드 스튜디오에서 개발을 하다보면 에뮬레이터를 영어가 아닌 한국어로 하고 싶을 때가 있는데 그렇기에 이번 글에선 안드로이드 스튜디오에서 에뮬리터를 한국어로 설정하는 법을 알아보려고 한다 우선 안드로이드 스튜디오에서 에뮬레이터를 실행하고 설정에 들어간다 그 뒤에 Search settings에서 Languaes & input을 검색...

Kotlin timer 함수에 대하여

timer 함수는 무엇인가 코틀린에서 timer 함수는 일정 시간 간격으로 코드 블록을 반복적으로 실행할 수 있게 해주는 함수로 자바(Java)의 Timer 클래스를 기반으로 하며 코루틴과 같은 코틀린의 기능과 잘 어우러져 사용된다 또한 이러한 timer 함수는 백그라운드 작업, 주기적인 업데이트, 지연된 작업 실행 등 다양한 상황에서 유용하게 사용...

깃허브 지킬 블로그 이미지 여백 문제

문제 상황 위와 같이 깃허브 지킬 블로그에 이미지를 사용하였는데 이미지 옆에 여백이 생겨 toc를 침범하였다 해결법 깃허브 지킬 블로그에서는 Markdown 형식을 사용하여 블로그 글을 작성하기 때문에 HTML에 style 속성을 사용하여 이미지를 배치할 위치를 조정 할 수 있다 <div style="text-align: left;"...

첫 업데이트 프로젝트 회고록 - 코딩 보카 2.0 회고록

코딩 보카 2.0을 마치고… 프로젝트 소개 코딩 보카는 개발을 시작한 지 얼마 안된 초보자들을 위한 앱으로 다양한 개발 용어들과 개발관련 영단어들을 사용자의 수준에 맞게 레벨 별로 학습할 수 있게 도와주는 앱 프로젝트로 이번 코딩 보카 2.0은 이러한 코딩 보카를 유저들의 피드백을 반영하여 기존의 코딩 보카를 고도화 시킨 프로젝트이다. ...

Kotlin generateSequence 함수

코틀린은 현대적이면서도 간결한 언어 특성을 가진 언어로 많은 기능과 장점을 가지고 언어 이번 글에선 이러한 코틀린에 존재하는 여러 함수 중 하나인 generateSequence 함수의 개념과 사용법 및 generateSequence 예제 코드등을 알아보려한다 무한 시퀀스란 무엇인가? 우선 generateSequence 대해 알기 전 무한 시쿼스가 ...

안드로이드 RecyclerView item 간격 설정

RecyclerView는 안드로이드 앱 개발에서 리스트나 그리드 형태의 반복적인 요소를 표시할 때 listView와 함께 자주 사용되는 View로 하지만 기본적으로 아무 설정을 하지 않는다면 RecyclerView 아이템들 사이에는 간격이 없다. 그렇기에 이번 글에선 ItemDecoration을 통해 RecyclerView에 item 간격 설정을 하는...

Wear OS 프로젝트 회고록 - 세트 체커 회고록

세트 체커를 마치고… 프로젝트 소개 세트 체커는 개발자가 하도 운동하다가 세트를 까먹어 답답해서 만든 바로 그 앱…! 이라는 설명에서 알 수 있듯이 내가 헬스를 시작하고 겪었던 문제인 운동이 힘들어서 자꾸만 내가 몇 세트인지를 까먹는 문제를 해결하기 위한 앱으로 헬스 중에서도 간편히 잘 사용할 수 있게 워치용으로 제작한 앱 프로젝트이다. ...

안드로이드 Class Model does not define a no-argument constructo 오류 해결 방법

문제 상황 안드로이드에서 Firebase를 사용하던 중 아래와 같은 오류 메시지가 발생하였다 Class Model does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped. 해결법 해당 문제 해...

JAVA 추상 클래스, 인터페이스 파트 수행 정리

JAVA 1번 💡 다음 코드는 오류를 포함하고 있는데 오류가 발생하는 위치와 이유를 설명하시오 class A { int a = 3; final int b = 5; A() { a = 7; b = 9; } } final로 선언한 필드는 값을 변경할 수 없다 2번 💡 다음 코드는 오류를 포함하고 있는데 오류가 발생하는 위치와 이유...

안드로이드 Uri 권한 유지 시키기

안드로이드 Uri 권한 유지 시키기 안드로이드에서 파일 관련해서 건들이다보면 이제는 절대 경로말고 Uri를 써야한다고 해서 Uri 쓰다가 분명 Permission을 허용했지만 액티비티나 Fragment을 이동하거나 시간이 지나고 나면 퍼미션 오류가 나는 경우가 있는데 이는 Uri 권한이 짧기에 생긴 문제로 이를 해결하려면 권한을 늘려주면 된다 ...

안드로이드 Android Module-Level Build.gradle 오류 해결 방법

문제 상황 안드로이드에서 local.properties를 사용해서 API 키를 숨기려던 중 아래와 같은 오류 메시지가 발생했다 Cause: defaultConfig contains custom BuildConfig fields, but the feature is disabled. To enable the feature, add the followi...

안드로이드 RecyclerView 스크롤

안드로이드 RecyclerView 스크롤 안드로이드에서 RecyclerView를 사용하다보면 화면을 스크롤 시켜서 특정 위치에 있는 item을 보여주고 싶을 때가 있는데 해당 방법을 구현하는 방법은 매우 간단하다 RecyclerView이름.scrollToPosition(아이템 위치) 위와 같이 RecyclerView를 스크롤 시킬 수 있다 ...

안드로이드 Kotlin-DSL local.properties 사용

안드로이드 Kotlin-DSL local.properties 사용 안드로이드에서 local.properties를 사용해서 API 키나 숨겨야 하는 것이 있을 때 일반적으로 Groovy 사용할 때는 Properties properties = new Properties() properties.load(project.rootProject.file('l...

안드로이드 java RuntimeException과 Kotlin lateinit 프로퍼티 초기화 오류 해결 방법

문제 상황 java.lang.RuntimeException: Unable to start activity 안드로이드 개발 중 위와 같은 메시지가 발생하면서 앱이 종료되는 문제가 발생하였다 해결법 해당 문제는 오류 메시지와 제목에서도 알 수 있듯이 lateinit 프로퍼티를 초기화 하지 않고 사용하여 발생하는 간단한 문제로 해당 프로퍼티를 사...

안드로이드 Canvas trying to draw too large bitmap 오류

문제 상황 Canvas: trying to draw too large bitmap 안드로이드 개발 중 ImageView로 평소처럼 이미지를 넣고 빌드하니 위와 같은 메시지가 발생하였다 해결법 해당 문제는 사용한 이미지 사이즈가 너무 커서 일어나는 문제로 이미지의 사이즈를 줄이면 된다 또는 Glide 같은 외부 라이브러리를 사용해서 이미지를 ...

안드로이드 다크 모드 스위치 전환 끊김 해결

안드로이드 다크 모드 스위치 전환 끊김 스위치를 통해 라이트/다크 모드를 전환 하는 코드를 만들었더니 앱에서 모드가 스위치로 모드가 전환될 때마다 스위치가 움직이는게 끊기는 현상이 나타났다 그래서 해당 문제를 해결하기 위해서 다양한 방법들을 찾아보았는데 이번 글에선 해당 방법들에 대해 소개할 것이다 다크 모드 전환 시 딜레이 주기 Handler...

안드로이드 다크 모드 시작하기

안드로이드 다크 모드 많은 앱 개발 초보자들이 잘 신경쓰지 못하는 부분이지만 앱 개발에서 사용자 경험을 향상시키는 중요한 요소 중 하나는 다크 모드의 지원으로 다크 모드는 눈의 피로를 줄이고 저조도 환경에서의 가독성을 높이며 배터리 수명을 연장하는 등의 장점을 제공하기에 다크모드를 사용하는 유저들이 많아 완성도 높은 앱을 제작하고 출시하기 위해서는...

안드로이드 상태 바(스테이터스 바) 투명화

안드로이드 상태 바 투명화 안드로이드 개발을 하다보면 상태 바(스테이터스 바)를 투명화 시키고 싶은 적이 있을 것이다 해당 방법을 구현하는 법은 매우 간단한데 그 방법은 다음과 같다 신버전 최근에 더욱 간편한 새로운 방법을 알게 되어서 해당 방법을 소개하겠다 enableEdgeToEdge 함수를 사용하면 된다 override fun onCre...

안드로이드 상태 바(스테이터스 바), 앱 바 제거

안드로이드 상태 바(스테이터스 바), 앱 바 제거 안드로이드 개발을 하다보면 굳이 예쁘지도 않은 앱바나 상태바 때문에 골머리를 앓은 적이 한번 쯤은 있을 것이다 그렇다면 이런 못생긴 옵션들을 어떻게 하면 내 눈 앞에서 치울 수 있을까? 안드로이드 앱 바 제거 구현 <item name="android:windowNoTitle">true&...

안드로이드 targetSdkVersion 에러

문제 상황 Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. 안드로이드 스...

빅데이터 분석 Matplotlib 핵심 정리

그래프 설정, 타이틀 설정, 그래프 색상, 마커, 라인스타일, 범례 구현 plt.plot([1,2,3,4],[2,1,3,5], 'gx:', # 그래프 색상, 마커, 라인스타일 한번에 구현(g = green, x = 마커, : = 라인) label = 'dotted') 범위 같은 건 무조건 []안에 넣기 그래프 범...

셸 정렬 알고리즘이란?

오늘은 정렬 알고리즘 중 삽입 알고리즘의 단점을 개선한 알고리즘인 셸 정렬 알고리즘에 대해 소개하려고 한다 참고로 셸 정렬이 셸 정렬인 이유는 이 알고리즘을 처음 제안한 Donald L. Shell의 이름에서 따와 붙여졌기 때문이다 셸 정렬이란? 셸 정렬은 기본적인 로직으로 삽입 정렬을 사용하지만 일정한 간격을 두고 요소들을 정렬하며 이 간격을 ...

계수 정렬 알고리즘이란?

오늘은 정렬 알고리즘 중 비교를 사용하지 않는 정렬 방법인 계수 정렬에 대해 소개하려고 한다 참고로 계수 정렬은 입력의 특정 범위가 있을 때 유용하게 사용할 수 있는 정렬 알고리즘이다 계수 정렬이란? 계수 정렬은 주어진 입력 배열에서 각 숫자의 발생 횟수를 계산하고 이 정보를 사용하여 배열을 다시 정렬하는 방법으로 이 알고리즘의 핵심 아이디어는...

병합 정렬 알고리즘이란?

오늘은 정렬 알고리즘 중 병합 방식을 활용한 정렬 알고리즘인 병합 정렬에 대해 소개하려고 한다 참고로 병합 정렬은 분할 후 정복하는 방식을 사용하여 리스트를 정렬하는 알고리즘이다 병합 정렬이란? 병합 정렬은 리스트를 반으로 나눈 후 나눠진 리스트를 다시 정렬하고 이렇게 정렬된 리스트들을 병합하는 방식으로 동작한다 알고리즘의 가장 큰 특징은 재귀...

너비 우선 탐색 알고리즘이란?

오늘은 그래프 탐색 알고리즘 중 하나인 너비 우선 탐색에 대해 알아보려고 한다 먼저 너비 우선 탐색은 이름에서 알 수 있듯이 시작 정점에서 인접한 정점들을 먼저 탐색하며 이후 더 이상 방문할 수 있는 곳이 없으면 다음 정점으로 너비 탐색을 진행하는 방식의 알고리즘이기 때문에 너비 우선 탐색이라고 붙여졌다 너비 우선 탐색이란? 너비 우선 탐색(BF...

Kotlin 범위 지정 함수(Scope Functions)

Kotlin 범위 지정 함수(Scope Functions) 코틀린은 현대적이면서도 간결한 언어 특성을 가진 언어로 많은 기능과 장점을 가지고 있는데 그 중에서도 이번엔 사람들이 많이 헷갈려하는 코틀린의 범위 지정 함수에 대해 알아보려고 한다 범위 지정 함수(Scope Functions)란? 우선 범위 지정 함수(Scope Functions)란 범...

깊이 우선 탐색 알고리즘이란?

오늘은 그래프 탐색 알고리즘 중 하나인 깊이 우선 탐색에 대해 알아보려고 한다 먼저 깊이 우선 탐색은 이름에서 알 수 있듯이 시작 정점에서 가장 깊숙이 들어간 뒤 더 이상 방문할 수 있는 곳이 없으면 이전 정점으로 돌아와 다른 정점으로 깊이 탐색을 진행하는 방식의 알고리즘이기 때문에 깊이 우선 탐색이라고 붙여졌다 깊이 우선 탐색이란? 깊이 우선 ...

Kotlin it VS this

Kotlin it VS this 코틀린은 현대적이면서도 간결한 언어 특성을 가진 언어로 많은 기능과 장점을 가지고 있는데 그 중에서도 이번엔 사람들이 많이 헷갈려하는 코틀린의 범위 지정 함수(Scope Funciton)의 it과 this에 대해서 알아보려고 한다 it이란? 우선 it에 대해 알아보자 it은 범위 지정 함수 중 let과 also에서...

이진 탐색 트리란?

오늘은 탐색 알고리즘 중 이진 탐색 알고리즘과 비슷한 이름을 가진 알고리즘인 이진 탐색 트리에 대해 알아보려고 한다 참고로 이진 탐색 트리는 이진 탐색 알고리즘의 원리를 트리 형태로 확장한 자료구조로 이진 탐색이 배열 위에서 이루어진다면 이진 탐색 트리는 트리 구조 위에서 탐색을 진행 할 수 있다 이진 탐색 트리란? 이진 탐색 트리는 이진 트리의...

해시 탐색 알고리즘이란?

오늘은 탐색 알고리즘 중 하나인 해시 탐색에 대해 알아보려고 한다 참고로 해시 탐색은 이름에서 알 수 있듯이 해시 테이블(해시 맵)을 사용하여 탐색해서 해시 탐색이라고 이름이 붙여졌다 해시 탐색이란? 해시 탐색이란 키를 값에 연결시켜 빠르게 검색을 수행할 수 있도록 도와주는 기법에 알고리즘으로 이를 위해 보통 일명 해시 테이블(해시 맵)을 사용하...

이진 탐색 알고리즘이란?

오늘은 탐색 알고리즘 중 빠른 탐색 속도를 가진 알고리즘 중 하나인 이진 탐색에 대해 알아보려고 한다 참고로 이진 탐색은 이름에서 알 수 있듯이 리스트를 항상 두 부분으로 나눠서 탐색해서 이진 탐색이라고 이름이 붙여졌다 이진 탐색이란? 이진 탐색 알고리즘은 정렬된 리스트에서 특정 값을 효율적으로 찾기 위해 탐색 범위를 반으로 줄여나가며 리스트의 ...

선형 탐색 알고리즘이란?

오늘은 탐색 알고리즘 중 가장 간단한 알고리즘 중 하나인 선형 탐색에 대해 알아보려고 한다 참고로 선형 탐색은 이름에서 알 수 있듯이 리스트의 원소들을 한번에 하나씩 선형적(linearly)으로 탐색한다고 해서 선형 탐색이라고 이름이 붙여졌다 선형 탐색이란? 선형 탐색 알고리즘은 리스트에서의 모든 원소를 순차적으로 검사하여 원하는 값을 찾는 가장...

선택 정렬 알고리즘이란?

오늘은 삽입 정렬, 버블 정렬과 같은 기본적인 정렬 알고리즘 중 하나인 선택 정렬에 대해 알아보려고 한다 참고로 선택 정렬은 이름에서 알 수 있듯이 가장 작은 원소를 선택하여 앞쪽부터 채워 나가는 방식의 정렬 알고리즘이다 선택 정렬이란? 선택 정렬은 주어진 리스트 내에서 최소값(또는 최대값)을 찾아서 맨 앞의 값과 교환하는 방식으로 정렬하는 알고...

삽입 정렬 알고리즘이란?

오늘은 정렬 알고리즘 중 단순하게 비교 기반 전략을 활용한 정렬 알고리즘인 삽입 정렬에 대해 소개하려고 한다 참고로 삽입 정렬은 이름에서 알 수 있듯이 원소를 적절한 위치에 삽입하여 정렬을 진행하는 방식이다 삽입 정렬이란? 삽입 정렬은 배열의 각 원소를 알맞은 위치에 삽입하는 방식으로 정렬하는 알고리즘으로 앞쪽부터 시작해서 앞쪽의 배열은 정렬된...

퀵 정렬 알고리즘이란?

오늘은 정렬 알고리즘 중 분할 정복 전략을 활용한 정렬 알고리즘인 버블 정렬에 대해 소개하려고 한다 참고로 퀵 정렬 알고리즘에 퀵(Quick)이 붙은 이유는 다른 여러 정렬 알고리즘에 비해 빠르게”동작한다는 것을 강조하기 위해서 붙여졌다고 한다 퀵 정렬이란? 퀵 정렬은 분할 정복 전략을 사용하는 정렬 알고리즘으로 주어진 배열에서 임의의 원소를 피...

버블 정렬 알고리즘이란?

오늘은 정렬 알고리즘 중 가장 기본적이면서 초보자도 쉽게 이해할 수 있는 버블 정렬에 대해 소개하려고 한다 참고로 버블 정렬은 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 버블 정렬이라고 불린다 버블 정렬이란? 버블 정렬은 인접한 두 원소를 비교하여 잘못된 순서로 되어 있다면 서로 교환하는 방식의 정렬으로 이 과정을 전체 ...

Dart에서 mixin 다이아몬드 문제 처리

다중 상속에서 다이아몬드 문제란? 여러 언어에서 다중 상속은 직접적으로 제공하지 않거나 특별한 규칙 또는 알고리즘으로 적용한다 이는 다중 상속으로 나타날 수 있는 다이아몬드 문제 때문인데 여기서 다이아몬드 문제란 아래 설명을 보면 이해하기 쉽다 A / \ B C \ / D 위 구조와 같이 두 개의 클래스 B와 ...

다중 상속에서 다이아몬드 문제란?

다중 상속이란? 다중 상속은 객체 지향 프로그래밍에서 한 클래스가 둘 이상의 클래스로부터 상속을 받을 수 있는 기능으로 이러한 다중 상속은 딱봐도 유리해보이지만 동시에 다이아몬드 문제라는 주요한 문제점을 발생시킬 수 있다 다이아몬드 문제란? 여기서 다이아몬드 문제란 아래 설명을 보면 이해하기 쉬운데 A / \ B C \...

Kotlin if식? if문?

Kotlin if식? if문? 코틀린은 현대적이면서도 간결한 언어 특성을 가진 언어로 많은 기능과 장점을 가지고 있는데 그 중에서도 이번엔 코틀린의 if에 대해서 알아보려고 한다 전통적인 프로그래밍 언어(Java, C, C++, ETC…)에서는 if를 주로 조건부 명령문으로 사용했지만 코틀린에서는 if를 표현식으로 사용할 수 있다 말로는 잘 이해...

안드로이드 com.google.firebase.storage.StorageException User does not have permission to access this object.

안드로이드 com.google.firebase.storage.StorageException: User does not have permission to access this object 오류 com.google.firebase.storage.StorageException: User does not have permission to access thi...

코드 주석 작성시 권장 사항

코드에 주석을 작성하는 것은 개발자로서 지켜야 할 중요한 원칙 중 하나로 주석은 코드의 해석을 돕고 팀원들과의 원활한 협업을 도와준다 그러나 부적절한 주석은 오히려 오해를 불러와 피해를 줄 수 있으므로 주석 작성법을 정확히 알고 있어야 한다 그렇기에 이번 글에선 올바르게 주석을 작성하는 법에 대해 소개하려고 한다 1. 의도를 명확히 해야 한다 코드...

맥북 Ventura OS 안드로이드 스튜디오, 인텔리제이 화면 깜빡거림 오류

문제 상황 현재 내 맥북에서는 Ventura OS 버전 업그레이드 이후 언제부턴가 안드로이드 스튜디오, 인텔리제이 등등 프로그램에서 간헐적으로 화면이 깜빡거리는 오류가 발생하고 있다 물론 깜빡거림 정도는 신경 안쓰고 그냥 코딩하는 상남자들도 있겠지만 본인은 조금의 불편함이라도 참을 수 없는 최강 MZ이기에 해결법을 정리해서 올리려고 한다 여기 젯...

안드로이드 Given final block not properly padded. Such issues can arise if a bad key is used during decryption. 에러

문제 상황 Given final block not properly padded. Such issues can arise if a bad key is used during decryption. 안드로이드에서 apk를 배포하기 위해 apk를 생성하던 중 위와 같은 오류 메시지가 발생하였다 해결법 해당 문제는 간단한 문제로 apk를 만드는 탭에서 ...

안드로이드 Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $ 에러

문제 상황 Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $ 안드로이드에서 레트로핏2로 GET 요청을 하던 중 위와 같은 오류 메시지가 발생했다 instance = Retrofit.Builder() .baseUrl(BuildConfig.BA...

안드로이드 Suspension functions can be called only within coroutine body 오류 메시지

안드로이드 Suspension functions can be called only within coroutine body 오류 메시지 Android Suspension functions can be called only within coroutine body 해당 문제는 코루틴 스코프 안에서 코루틴 스코프를 또 사용해서 발생한 오류 메시지로 만약...

안드로이드 CLEARTEXT communication to XXXX not permitted by network security policy

안드로이드 CLEARTEXT communication to XXXX not permitted by network security policy CLEARTEXT communication to XXXX not permitted by network security policy 해당 문제는 안드로이드 9.0 파이에서는 https를 사용하도록 강제하기 때...

안드로이드 ScrollView 속 KaKao Map 스크롤 문제 Kotlin

안드로이드 ScrollView 속 KaKao Map 스크롤 문제 안드로이드에서 ScrollView와 KaKao Map을 같이 쓰다보면 KaKao Map을 수직 스크롤하려 했으나 ScrollView가 포커스를 가져가 화면이 스크롤되어 매우 불편한데 해당 문제를 해결하기 위해서는 <ScrollView android:layout_width...

안드로이드 Firebase Realtime Database Permission denied Error

문제 상황 Firebase Realtime Database 읽기 코드를 사용하던 중 Permission denied 위와 같은 에러 메시지가 발생하였다 해결법 해결법은 생각보다 간단한데 Firebase 콘솔에서 Realtime Database 규칙을 읽기를 허용으로 바꿔준다

안드로이드 Firebase Realtime Database does not define a no-argument constructor 오류

문제 상황 Firebase Realtime Database 읽기 코드를 사용하던 중 com.google.firebase.database.DatabaseException: Class com.woojun.ai.util.UserInfo does not define a no-argument constructor. If you are using ProGua...

안드로이드 androidx.core:core-ktx와 androidx.core:core 라이브러리 호환성 이슈

문제 상황 Retrofit2 라이브러리를 사용하려고 하던 중 아래와 같은 오류 메시지가 발생하며 앱이 빌드되지 않았다 2 issues were found when checking AAR metadata: 1. Dependency 'androidx.core:core-ktx:1.12.0-alpha05' requires libraries and ap...

안드로이드 에뮬레이터 오류 MAC

문제 상황 어느 날 프로젝트를 켜서 안드로이드 에뮬레이터를 돌릴려고 하니 위와 같이 Error while waiting for device: Pixel 5 API 30 is already running. If that is not the case, delete /Users/woojun/.android/avd/Pixel_5_API_30.avd/*...

안드로이드 textInputLayout 에러 메시지 padding 조절

안드로이드 textInputLayout 에러 메시지 padding 조절 안드로이드에서 textInputLayout을 통해 입력창을 구현하여 에러 메시지를 표시하다보면 위와 같이 에러 메시지에 위치가 hint 텍스트 위치와 같게 설정 되어서 무언가 디자인 상으로 애매해지는 경우가 발생할 수 있다 그럴 땐 해당 코드를 사용해서 해결할 수 있는데 ...

안드로이드 뷰에 버튼 클릭 효과 구현

안드로이드 뷰에 버튼 클릭 효과 구현 위와 같이 안드로이드에서 기본으로 제공되는 버튼을 사용하지 않고 다른 뷰들을 사용하여 버튼을 구현하게 되면 겉보기에는 버튼과 유사하지만 유저가 버튼으로 보이는 뷰를 터치하게 되면 특별한 효과가 없어서 밋밋해보이며 터치 피드백을 잘 느끼지 못할 수 있다 그럴 때 필요한 옵션이 android:foregrou...

UDP란 무엇인가?

UDP란 무엇인가? UDP (User Datagram Protocol)는 컴퓨터 네트워크에서 데이터를 비연결성으로 전송하는 프로토콜로 인터넷 프로토콜중 하나이다 하지만 UDP는 TCP와 달리 신뢰성이나 연결 설정을 제공하지 않고 간단한 데이터를 전송하는 데에 사용된다 이러한 UDP는 데이터 전송을 위해 IP 프로토콜 위에서 동작하며 패킷 기반의 프...

안드로이드 체크박스 체크 메서드의 차이점 setOnCheckedChangeListener vs setOnClickListener

안드로이드 체크박스 체크 메서드의 차이점 setOnCheckedChangeListener vs setOnClickListener 안드로이드에서 체크박스를 사용하다보면 다들 한번 식 체크박스 체크와 같은 처리를 할 경우가 생기기에 아래와 같은 메서드를 사용할 일이 있을 것이다 checkBox1.setOnCheckedChangeListener { _,...

TCP란 무엇인가?

TCP란 무엇인가? TCP (Transmission Control Protocol)는 컴퓨터 네트워크에서 안정적이고 신뢰성 있는 데이터 전송을 제공하는 프로토콜로 인터넷 프로토콜 스위트의 주요 프로토콜 중 하나이며 전 세계적으로 널리 사용되고 있는 프로토콜이다 TCP는 연결 지향적인 프로토콜로 데이터를 전송하기 전에 먼저 세션을 설정하고 데이터 전...

안드로이드에서 finish()와 finishAffinity() 메서드의 차이점

안드로이드에서 finish()와 finishAffinity() 메서드의 차이점 안드로이드 앱 개발에서 액티비티(Activity)를 종료하는 데는 finish()와 finishAffinity()라는 두 가지 메서드가 있다 이 메서드는 액티비티 스택을 관리할 때 중요한 차이점을 가지고 있는데 finish()와 finishAffinity()의 차이에 대...

Kotlin apply 문법이란?

Kotlin apply 코틀린에서 사용되는 apply 함수란? 객체 초기화 블록을 실행하는 데 사용되는 표준 함수로 apply를 사용하면 객체의 속성을 초기화하거나 설정하는 작업을 간결하게 수행할 수 있다 apply { // 객체 초기화 코드 } 위 코드처럼 apply 함수를 사용하며 apply 블록 내에서는 주어진 객체의 속성을 직접 ...

안드로이드 TextInputEditText 커서, 하이라이트 색상 변경

문제 상황 안드로이드에서 입력창 구현을 위해 TextInputEditText를 사용하다보니 커서 색상과 하이라이트 색상이 마음에 들지 않아, 커서 색상과 하이라이트 색상을 변경하고 싶다 해결법 그럴 때는 아래와 같은 방법으로 TextInputEditText 색상을 원하는대로 변경할 수 있다 TextInputEditText 하이라이트 색상 변경 ...

JAVA 클래스 파트 수행 정리

JAVA 1번 💡 클래스 내부 : 속성, 메서드, 생성자, 내부 클래스 💡 클래스 외부 : 패키지, 임포트, 외부 클래스 2번 💡 참조변수 a를 선언하고 클래스 A의 객체를 생성하시오 A a = new A(); 💡 객체 내부의 필드 m에 값 5를 대입하시오 a.m = 5; 💡 필드 m의 값을 콘솔에 출력하세요 System.out....

SQL 기본 문법 2

SQL 기본 문법 HAVING SELECT 열1, 열2 FROM 테이블 GROUP BY 열1, 열2 HAVING 조건 HAVING 문은 GROUP BY 문으로 그룹화된 데이터에 조건을 적용하여 필터링 하는데 사용된다 Join SELECT 열 FROM 테이블1 JOIN 테이블2 ON 조건 JOIN은 두 개 이상의 테이블을 연결하여 하나의 ...

Gradle 빌드 오류 - 'Could not resolve all files for configuration' 해결 방법

문제 상황 안드로이드에서 라이브러리를 추가하려고 하던 중 앱을 빌드하니 위와 같이 Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException:Could not resolve all files for config...

안드로이드 Unable to add window 오류

문제 상황 안드로이드에서 Dialog를 사용하던 도중 Unable to add window – token null is not valid; is your activity running?라는 메시지가 발생하며 앱이 강제 종료되게 되었다 문제 코드 val dialog = Dialog(baseContext) dialog.setContentView(R....

플러터(Flutter)란 무엇일까? 플러터(Flutter)를 이해해보자

현재 진행중인 대회 프로젝트를 끝내고 다음 프로젝트를 현재 재학중인 세명컴퓨터고등학교 앱을 만드는 것을 잡았으나 혼자서 안드로이드, iOS 둘 다 네이티브로 만들기에는 기간이 촉박하여 고민하던중 결국 크로스 플랫폼로 제작하는 것으로 결정하여 대표적 크로스 플랫폼 프레임워크인 플러터에 대해 알게 된 내용에 대해 정리해보았다. 플러터(Flutter)...

SQL 기본 문법 1

SQL 기본 문법 SQL SELECT 기본 select * from 테이블명 해당 테이블에 모든 정보를 가져온다 select 컬럼명1, 컬럼명2 from 테이블명 해당 테이블에 특정한 컬럼의 데이터만 가져온다 연산자 사용 select 컬럼명1, 컬럼명1*500 컬럼명1-100, 컬럼명1* 3 from 테이블명; 해당 테이블에 컬럼 ...

처음으로 규모있는 프로젝트 회고록 - 코딩 보카 회고록

코딩 보카를 마치고… 프로젝트 소개 코딩 보카는 개발을 시작한 지 얼마 안된 초보자들을 위한 앱으로 다양한 개발 용어들과 개발관련 영단어들을 사용자의 수준에 맞게 레벨 별로 학습할 수 있게 도와주는 앱 프로젝트이다. 플랫폼 : 안드로이드/모바일 사용 기술 : Kotlin, XML, ViewBinding, Firebase, Glide, ...

첫 iOS 프로젝트 회고록 - 악질 이름 생성기

악질 이름 생성기를 마치고… 프로젝트 소개 악질 이름 생성기는 웹사이트에서 할 수 있었던 악질 이름 생성기를 iOS 앱으로 구현한 프로젝트로 안드로이드 개발 공부를 접고 iOS앱을 배우기 시작한 후 처음으로 진행한 프로젝트이다. 플랫폼 : iOS/모바일 사용 기술 : Swift, UIKit, StoryBoard 진행 기간: 202...

첫 WEB 프로젝트 회고록 - 세붕이 웹사이트

세붕이 웹 홈페이지를 마치고… 프로젝트 소개 세붕이 웹 홈페이지는 내가 현재 활동하고 있는 세명컴퓨터고등학교 세붕이의 웹사이트를 만드는 프로젝트로 내가 처음으로 진행한 웹 프로젝트이다. 플랫폼 : WEB 사용 기술 : JavaScript, NEXT.js, Tailwind CSS, Tailblocks, Notion Database 진...

생애 첫 프로젝트 회고록 - 반응 속도 테스트

생애 첫 프로젝트를 마치고… 프로젝트 소개 반응 속도 테스트는 웹사이트들에서 플레이할 수 있었던 반응속도 테스트를 안드로이드 앱으로 구현한 프로젝트로 그 전까지 클론 코딩으로 여러 앱이나 웹을 따라 만들기만 한 내가 진행한 생애 첫 프로젝트이다. 플랫폼 : 안드로이드/모바일 사용 기술 : Kotlin, XML, ViewBinding ...

6 issues were found when checking AAR metadata 오류

문제 상황 안드로이드 스튜디오에서 앱 프로젝트를 만들어 실행하려고 했으나 6 issues were found when checking AAR metadata: 1. Dependency 'androidx.appcompat:appcompat-resources:1.6.1' requires libraries and applications tha...

KPT 회고 방법

KPT 회고 방법이란? KPT 회고는 프로젝트나 일의 결과를 돌아보고 개선할 점을 찾기 위한 방법으로 많이 사용되는 방법 중 하나로 KPT는 각각 Keep, Problem, Try의 약자로 이루어져 있으며 각각 유지해야 할 부분, 문제점, 시도해 볼 점을 나타낸다 이번 글에서는 KPT 회고 방법에 대해 자세히 알아본다 우선 각 단어에 대해 살펴보...

웹 페이지 렌더링 방식

웹 페이지 렌더링 웹 페이지를 렌더링 하는 방식에는 크게 두가지 방식이 있다 여러분이 어디선가 들어본 것 같은 서버 사이드 렌더링(Server-side rendering)과 클라이언트 사이드 렌더링(Client-side rendering) 모두 웹 페이지의 화면을 렌더링하는 방식이지만 그 방법과 특징에는 차이가 있다 그렇기에 이번 글에서는 이 둘...

iOS AutoLayout 오류 메시지 팁

AutoLayout 오류 메시지 팁 AutoLayout 오류 메시지가 떴을 때 iOS 개발을 할 때 스토리보드 없이 코드로 하다보면 해당 메시지를 마주할 날이 한번쯤은 생길 것이다 해당 메시지가 뜨면 AutoLayout 설정 문제가 발생한 것인데 해당 문제가 발생하게 되면 매우 짜증나는 상황이 된다 하나하나 일일히 찾아보며 수정해야 되고 오...

백준 허브 업로드 오류 해결법

문제 상황 백준 허브에서 CORS Issue로 인한 업로드 오류 때문에 백준에서 문제를 풀어도 빨간 색 체크 표시가 뜨며 업로드가 되지 않는 문제가 발생하고 있다 해결법 Chrome 확장 프로그램을 깔고 첫 번째 방법 바로 실행한다 설정 페이지를 클릭 한 뒤 두 번째 방법 cors off 한 상태로 3번을 체크한다 세 번...

iOS 코코아팟 pod init 오류

문제 상황 코코아팟을 설치 후 pod init을 실시하니 Oh no, an error occurred.라는 메시지가 나온다 그래서 해당 문제를 구글에 검색해보고 여러 해결책들을 시도해봤지만 모두 소용이 없었다 그래서 거의 포기하던 차에 해당 에러 메시지에 나온 주소들로 들어가보니 나와 같은 문제를 호소하는 사람 글이 나왔다 그래서 알게 ...

자료구조 (집합)

집합(Set) 집합은 중복을 허용하지 않는 자료구조이며 내부적으로는 맵과 비슷하게 C++은 트리형태로 되어 있으며 삽입/삭제 속도는 O(log N), Python은 해쉬 형태로 구현되어 있으며 삽입/삭제 속도는 O(1)이다 C++ 코드로는 이렇게 set<int> s; s.insert(0); s.insert(0); s.insert(1)...

자료구조 (맵)

맵(Map, Dictionary) 맵이란 Key와 Value가 한 쌍으로 구성되어 있는 자료 구조이다 여기서 Value는 중복이 가능하지만 Key는 중복이 불가능하다 맵은 C++과 Python에서 다르게 구현되어 있는데 C++은 Red-Black Tree로 구현되어 있으며 삽입/삭제 속도가 O(log N)이고 Python으로는 Hash로 구현되어 ...

자료구조 (우선순위 큐)

우선순위 큐(Priority Queue) 우선순위 큐란 큐처럼 먼저 들어오는 데이터가 아닌 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조이다 우선순위 큐에 삽입/삭제 속도는 O(log N)이다 우선순위 큐는 Max-Heap 방식과 Min-Heap 방식 둘로 나뉘는데 Max-Heap은 위 그림과 같이 부모 노드의 키 값이 자식 노드보다 ...

자료구조 (큐)

큐(Queue) 큐란 선입선출(FIFO) 특성을 가진 자료구조로 여기서 선입선출은 가장 먼저 들어온 데이터가 가장 먼저 나간다는 뜻이다 큐에 삽입/삭제 속도는 O(1)이다 C++ 코드로는 이렇게 queue<int> q; q.push(0); q.push(1); q.push(2); q.push(3); cout << "s...

자료구조 (스택)

스택(Stack) 스택이란 후입선출(LIFO) 특성을 가진 자료구조로 여기서 후입선출은 가장 최근에 들어온 데이터가 가장 먼저 나간다는 뜻이다 스택에 삽입/삭제 속도는 O(1)이다 C++ 코드로는 이렇게 stack<int> s; s.push(0); s.push(1); s.push(2); s.push(3); cout <&l...

자료구조 (연결 리스트)

연결 리스트(Linked List) 연결 리스트란 노드를 연결시킨 자료구조를 말하며 여기서 노드란 연결 리스트에서 데이터를 갖고 있는 데이터의 묶음을 말한다 연결 리스트에 삽입/삭제 속도는 O(1)이고 탐색 속도는 O(N)으로 삽입/삭제 속도가 빠르며 탐색 속도는 느리다고 볼 수 있다 이러한 까닭을 그림으로 보면 우선 탐색은 위와 같이...

iOS 스토리보드 삭제

스토리보드 삭제 1. Info.plist 수정 여기서 StoryBoard Name 완전 삭제 2. 프로젝트 수정 Supports multiple windows 클릭 Main storyboard file base name에 Value 값 삭제 3. SceneDelegate scene 수정 guard let windowScene =...

Android Splash Screen 이미지 안 나오는 문제

문제 상황 구글 공식문서에서는 위와 같이 windowSplashScreenAnimatedIcon 을 통해 창 중앙 아이콘을 변경할 수 있다고 나와있다 그래서 공식문서에 따라 배경과 아이콘을 설정하고 빌드하였지만 무언가 이상하여 Splash 화면을 멈춰서 확인해 보니 위와 같이 배경은 변경이 잘되고 있으나 아이콘을 변경이 되지 않고 뜨지...

chirpy layout 오류

문제 상황 깃허브 블로그 chirpy 테마를 적용했더니 ---layout: home # Index page--- 화면만 나온다 해결법 내 경우에는 깃허브에서 직접 파일은 다운 받아서 적용하여 gh-page branch가 자동으로 생성되지 않았기에 해당 방법으로 해결했다 참조 https://velog.io/@hashnsalt/Github-...

자료구조 (배열)

배열 배열이란 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료 구조를 말한다 배열에 삽입/삭제 속도는 O(N)이고 탐색속도는 O(1)로 탐색속도가 빠르며 삽입/삭제 속도는 느리다라고 볼 수 있다 이러한 까닭을 그림으로 보면 우선 탐색은 위와 같이 배열은 메모리가 연속적으로 나열되어 있기 때문에 임의 접근이 가능하여 탐색 속...

주 기억 장치 관리

주 기억 장치 관리 반입 기법 반입 기법이란 보조 장치에 저장되어 있는 프로그램이나 데이터를 언제 주 기억 장치로 가져올 것인지 결정하는 것을 말한다 반입에 기법은 크게 2가지로 요구 반입 (demand fetch) 요구 반입은 실행중인 프로그램이 보조 기억 장치에 있는 특정 프로그램이나 데이터등의 참조를 요구할 때 주 기억 ...

안드로이드 레이아웃 ConstraintLayout

ConstraintLayout ConstraintLayout은 복잡한 레이아웃을 단순한 계층 구조를 이용하여 형제 뷰들과 관계를 정의해서 구성하는 레이아웃으로 RelativeLayout과 비슷하지만 더 발전된 기능을 가지고 있다 ConstraintLayout에 주된 특징으로는 자식 뷰간의 상호관계 정의가 가능하고 LinearLayout을 써야만 ...

안드로이드 레이아웃 GridLayout

GridLayout GridLayout 은 행과 열로 구성된 테이블 화면을 만드는 레이아웃 클래스로 LinearLayout처럼 orientation 속성으로 가로나 세로 방향으로 나열할 수 있고 자동으로 줄바꿈을 할 수 있다는 특성이 있다 rowCount 속성으로 행의 개수를 지정하고 columnCount 속성으로 열의 개수를 지정한다

안드로이드 레이아웃 FrameLayout

FrameLayout FrameLayout 이란 뷰를 겹쳐서 출력하는 레이아웃으로 보통 뷰를 표시 여부를 설정하는 visibility와 함께 어떤 순간에 하나의 뷰만 출력할 때 사용한다 invisible 상태 visible 상태

안드로이드 레이아웃 RelativeLayout

RelativeLayout RelativeLayout 이란 상대 뷰의 위치를 기준으로 정렬하는 레이아웃 클래스로 기준이 되는 뷰의 id나 true false등을 값으로 특정한 속성들을 사용한다 위와 같이 RelativeLayout은 자동으로 배치되지 않으므로 아무 값을 주지 않는다면 겹쳐서 배치된다 RelativeLayout 배치 속성 ...

안드로이드 레이아웃 LinearLayout

LinearLayout LinearLayout 이란 뷰를 가로나 세로 방향으로 나열하는 레이아웃 클래스로 orientation 이라는 속성에 horizontal 이나 vertical 값으로 방향을 지정한다 위와 같이 vertical은 뷰를 세로로 배치하는 속성이고 horizontal은 위와 같이 뷰를 가로로 배치하는 속성이다 또한 Lin...

C언어 기본 문법 (총정리)

C 기본 문법 기본 형태 #include <stdio.h> int main(){ return 0; } 위에 형태가 C를 사용하는 기본 형태다. 차근 차근 뜯어보자 #include <stdio.h> 해당 부분은 stdio.h이라는 헤더파일을 include 즉 포함한다는 의미로 외부 소스 파일에 정의...

안드로이드 Missing contentDescription attribute on image

문제 상황 안드로이드에서 개발을 하다보면 노란색으로 경고가 뜨며 Missing contentDescription attribute on image라는 경고 문구가 발생한다 해결법 contentDescription을 추가하여 이미지에 대한 설명을 추가해준다

Kotlin 기본 문법 (총정리)

Kotiln 문법 기본 형태 fun main(){ } 위에 형태가 Kotlin을 사용하는 기본 형태다. 차근 차근 뜯어보자 여기서 fun main(){} 이 부분을 메인 함수라고 부르며 메인 함수는 코드에 시작점을 알려주는 부분이다 {}안 즉 함수 바디안에 코드를 적어 코드를 실행한다 참고로 자바와 같은 객체지향 언어는 프로그램을 실행할...

Kotlin 기본 문법 (클래스)

클래스 클래스란 값과 그 값을 사용하는 기능들을 묶어놓은 것으로 고유의 특징 값을 넣는 속성과 기능을 구현한 함수로 이루어졌다 코드 fun main(){ } class MobilePhone(osName:String,brand:String,model:String) 코틀린에서 클래스 선언 법은 위 코드와 같이 class를 적은 뒤 클래스 명과 기...

Kotlin 기본 문법 (Try-Catch문)

Try-Catch문 Try-Catch를 사용한 예외 처리에서 4개의 키워드가 있다 대표적으로 try, catch, finally, throw 로 try try 블록은 예외를 발생시킬 수 있는 구문 세트를 포함하며 try 뒤에는 catch나 finally, 아니면 둘 다 꼭 뒤에 따라와야 한다 catch catch 블록은 try 블록에서 던져진...

Kotlin 기본 문법 (접근 제한자)

접근 제한자 접근 제한자란 코틀린에서 코틀린에서 클래스, 인터페이스, 프로퍼티를 제한하는 데 사용하는 키워드로 public, private, protected, internal 이렇게 4가지 종류가 있다 public public은 클래스나 인터페이스 등이 접근 제한자로 명시되지 않는다면 설정되는 기본 제한자로 public으로 설정된 요소는 프로젝...

Kotlin 기본 문법 (람다식)

람다식 람다식이란 이름이 없어도 함수의 역할을 하는 익명 함수의 형태로 화살표 표기법을 사용한다 람다식을 코드로 살펴보면 코드 fun main() { fun plus1(a : Int,b:Int){ println(a+b) } val plus2 = { a: Int, b: Int -> println(a+b)...

Kotlin 기본 문법 (배열 리스트)

배열 리스트 배열 리스트 코틀린에서 동적으로 데이터를 조작할 수 있는 배열이다 코드 fun main() { val fruits = arrayListOf("apple") println(fruits) fruits.add("banana") println(fruits) } 출력 [apple] [apple, bana...

Kotlin 기본 문법 (맵)

맵 맵은 키와 값로 이루어져 있어 키를 통해서 값를 가져오는 것이 가능하다 이뮤터블 맵 코드 fun main() { val fruits = mapOf(1 to "banana","red" to "apple") println(fruits[1]) println(fruits["red"]) } 출력 banana apple 위...

Kotlin 기본 문법 (집합)

집합 집합은 순서가 없고 중복 된 데이터 값을 삭제한다 이뮤터블 집합 코드 fun main() { val fruits = setOf("banana","banana","banana") println(fruits.toSortedSet()) } 출력 [banana] 위와 같이 setOf를 사용해 이뮤터블 집합을 선언할 수 있다 ...

Kotlin 기본 문법 (리스트)

리스트 리스트는 데이터 타입과 커스텀 객체 또는 클래스 모두 저장할 수 있고 새로운 값이 추가되면서 크기도 바뀔 수 있다 그리고 수정할 수 있는 뮤터블 타입과 수정할 수 없고 읽기만 가능한 이뮤터블 타입이 존재한다 이뮤터블 리스트 코드 fun main() { val month = listOf("1월","2월","3월") prin...

Kotlin 기본 문법 (배열)

배열 배열은 변수들로 이루어진 유한 집합이다 배열을 구성하는 각각의 값을 배열 요소라고 하며 배열에서의 위치를 가리키는 숫자는 인덱스라고 한다 코틀린에서 배열 선언 법은 여러 가지가 있는데 코드 fun main() { val number1:IntArray = intArrayOf(1,2,3,4,5) val number2 = intA...

Kotlin 기본 문법 (널 안전성)

Null safety null safety는 말 그대로 null 에게서 안전한 프로그램 코드를 작성하는 것을 의미하며 null 참조 코드의 위험성을 없애기 위한 것이다 널러블 널러블은 코틀린에서 변수가 null 타입을 가질 수 있게 허용한 것을 말한다 코틀린에서 기본적으로는 Non-null 타입으로 null을 가질 수 없는 타입이기에 null을 ...

Kotlin 기본 문법 (함수)

함수 프로그래밍에서 함수(function)란 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합이며 크게 표준 함수와 사용자 정의 함수로 구분할 수 있다 Kotlin에서 함수를 정의하는 방법은 fun 뒤에 함수명을 적고 소괄호안에 매개변수에 이름과 타입을 지정한뒤 : 뒤에 반환 값에 타입을 적고 중괄호안에 실행시킬...

안드로이드 Kotlin 코드 지연 방법

문제 상황 어떠한 코드를 일정 시간 이후, 딜레이 시켜 실행시키고 싶다 해결법 Handler(Looper.getMainLooper()).postDelayed({ //실행할 코드 }, //딜레이 시킬 시간) 해당 코드를 사용하여 딜레이 시킬 시간과 실행시킬 코드를 적으면 원하는 시간 만큼 딜레이 시켜 사용할 수 있다

Kotlin 랜덤 값

문제 상황 Kotlin으로 랜덤한 값을 얻고 싶다 해결법 (/*최소 값*/../*최대 값*/).random() 해당 코드를 사용하여 랜덤한 값이 나올 수 있는 최소 값과 최대 값을 적으면 해당 사이에 랜덤 값이 나오게 된다

Kotlin 기본 문법 (반복문)

반복문 반복문이란 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문을 말한다 대표적으로 코틀린에서 많이 쓰이는 반복문은 while문,do-while문,for문이 존재한다 while문 코드 fun main() { var a = 10 while (a>0){ println(a) ...

Kotlin 기본 문법 (조건문)

조건문 조건문이란 주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문이다 if문 if 문은 조건식의 결과가 참(true)이면 주어진 명령문을 실행하고 거짓(false)이면 아무것도 실행하지 않는 조건문을 말한다 코드 fun main() { val apple = 4 if(apple>5){ ...

Kotlin 기본 문법 (변수)

변수 val VS var val 과 var은 코틀린에서 변수를 선언하는 법이다 사용법은 동일하다 val나 var뒤에 변수명을 적어 선언할 수 있다 예제와 함께 차이를 보면 코드 fun main(){ val name = "Kotlin" println("Hi "+name) } 출력 Hi Kotlin 코드 fun main(){ ...

Kotlin 기본 문법 (문자열 템플릿)

문자열 템플릿 코틀린에는 문자열 안에서 외부에 있는 변수를 가져올 수 있는 방법인 문자열 템플릿이 있다 + 를 이용하여 더 하는 방식이 아닌 fun main(){ val name = "Kotlin" println("내 이름은 $name 이다") } $ 기호 뒤에 변수명을 사용하여 한 문자열 내에서 처리하는 방식이다 그런데 만...

Kotlin 기본 문법 (입출력)

입출력 출력 코틀린에서 출력할 때 사용하는 내장 함수는 크게 두 가지가 있다 print와 println이다 둘 다 사용 법은 같다 ()안에 출력할 것을 적으면 출력이 된다 참고로 문자열은 ““로 묶어줘야 한다 예제와 함께 두 함수에 차이를 보면 코드 fun main(){ print("Hello World") } 출력 Hello Wor...

Kotlin 기본 문법 (기본 형태,주석)

Kotiln 기본 문법 기본 형태 fun main(){ } 위에 형태가 Kotlin을 사용하는 기본 형태다. 차근 차근 뜯어보자 여기서 fun main(){} 이 부분을 메인 함수라고 부르며 메인 함수는 코드에 시작점을 알려주는 부분이다 {}안 즉 함수 바디안에 코드를 적어 코드를 실행한다 참고로 자바와 같은 객체지향 언어는 프로그램을 ...

C언어 기본 문법 (입출력)

입출력 출력 코드 printf("Hello, World! \n"); 출력 Hello, World! printf는 괄호안에 적은 것들을 출력하는 함수이다. 코드 #include <stdio.h>   int main(){     char a = 'f';     char str[20] = "BlockDMask";     char* p...

C언어 기본 문법 (변수)

변수 영어로는 Variable 우리말로는 변수라고 지칭하는 변수는 바뀔 수 있는 어떤 값을 보관하는 곳을 말한다 코드 #include <stdio.h> int main(){ int a; return 0; } 이런 식으로 앞에 자료형을 적어주고 뒤에 이름을 적는 방식으로 선언 할 수 있다. 코드 #includ...

C언어 기본 문법 (기본 형태,주석)

C 기본 문법 기본 형태 #include <stdio.h> int main(){ return 0; } 위에 형태가 C를 사용하는 기본 형태다. 차근 차근 뜯어보자 #include <stdio.h> 해당 부분은 stdio.h이라는 헤더파일을 include 즉 포함한다는 의미로 외부 소스 파일에 ...

C언어 기본 문법 (구조체,공용체,열거형)

구조체 구조체란 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입으로 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다는 장점이 있다 구조체의 정의 방법은 struct 구조체이름{ 멤버변수1의타입 멤버변수1의이름; 멤버변수2의타입 멤버변수2의이름; ... }; 위와 같은 방법...

C언어 기본 문법 (문자열)

문자열 C언어에서는 큰따옴표(““)를 사용해 표현되는 문자열을 문자열 상수라고하며 C언어에서 문자열은 메모리에 저장된 일련의 연속된 문자들의 집합을 의미한다 문자열은 문자형 배열은 선언하여 사용 가능하다 코드 #include <stdio.h> int main() { char a[] = "나는 c언어가 좋아요"; prin...

C언어 기본 문법 (함수)

함수 프로그래밍에서 함수(function)란 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합이며 크게 표준 함수와 사용자 정의 함수로 구분할 수 있다 C언어에서 함수를 정의하는 방법은 반환 자료형과 함수이름 괄호안에 매개변수 목록 중괄호인 함수 몸체안에 함수가 실행할 코드를 적으면 된다 코드 #includ...

C언어 기본 문법 (포인터)

포인터 포인터란 메모리 상에 위치한 특정한 데이터의 (시작)주소값을 보관하는 변수을 말한다 포인터에 주소값이 저장되는 데이터의 형) *(포인터의 이름); 포인터는 위 코드와 같이 써서 사용할 수 있다 단항 & 연산자 단항 & 연산자는 피연산자의 주소값을 불러오는 연산자로 &(주소값을 계산할 데이터) 이렇게 사용할 ...

C언어 기본 문법 (배열)

배열 배열(array)은 같은 타입의 변수들로 이루어진 유한 집합이다 배열을 구성하는 각각의 값을 배열 요소라고 하며 배열에서의 위치를 가리키는 숫자는 인덱스라고 한다 배열을 선언만 하고 초기화하지 않으면 각 배열 요소에 아무런 의미를 가지지 않는 쓰레기값이 저장되어 있게 된다 코드 #include <stdio.h> int main...

C언어 기본 문법 (형 변환)

타입 변환 (형 변환) C언어에서 다른 타입끼리의 연산은 우선 피연산자들을 모두 같은 타입으로 만든 후에 수행되는데 이처럼 하나의 타입을 다른 타입으로 바꾸는 행위를 타입 변환 또는 형 변환이라고 한다 c에서는 크게 두가지 타입 변환 방식이 있는데 묵시적 타입 변환(자동 타입 변환) 명시적 타입 변환(강제 타입 변환) 1번은 컴파일러가...

C언어 기본 문법 (반복문)

반복문 반복문이란 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문을 말한다 대표적으로 c언어에서 많이 쓰이는 반복문은 while문,do-while문,for문이 존재한다 for문 코드 #include <stdio.h> int main() { for (int i = 1; i < 10; i+...

C언어 기본 문법 (조건문)

조건문 조건문이란 주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문이다 if문 if 문은 조건식의 결과가 참(true)이면 주어진 명령문을 실행하고 거짓(false)이면 아무것도 실행하지 않는 조건문을 말한다 코드 #include <stdio.h> int main() { int apple = ...

C언어 기본 문법 (연산자)

연산자 산술 연산자 산술 연산자란 사칙연산을 다루는 기본적이면서도 가장 많이 사용되는 연산자를 뜻하며 그 종류로는 +, -, *, /, % 가 있다 대입 연산자 대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연산자이다 종류로는 = 과 산술 연산자와 결합한 +=,-=,*=,/=,%가 있다 코드 #include <stdio.h> ...

가상 기억 장치 관리

가상 기억 장치 관리 가상 기억 장치 가상 기억 장치란 실행될 프로그램이나 데이터가 주기억 장치보다 크거나 주기억 장치 용량이 부족하여 프로그램이 제대로 실행되지 못하는 상황을 막기 위해 실행에 필요한 부분만 주기억 장치에 저장하고 나머지는 보조 기억 장치에 두고 동작하도록 하는 방법이다 가상 기억 장치 장단점 장점 용량이 큰 프로세스...

안드로이드 파이어베이스 최신버전 Gradle Kotlin 설정

문제 상황 파이어베이스 사이트에서 알려주는 android studio gradle 연결 방법이 최신 버전과는 다르다 해결법 project 수준 gradle에는 plugins { id 'com.google.gms.google-services' version '4.3.13' apply false } 을 추가 해주고 app 수준 gradle...

Unable to find explicit activity class 오류

문제 상황 패키지 파일을 만들고 거기에 비슷한 기능에 Activity들만 모아서 개발하던 도중에 Unable to find explicit activity class라는 오류가 떴다 해결법 AndroidManlfest.xml에서 오류가 떴는데 지난 번과 모든 것이 같고 내가 추가한 건 패키지 파일로 Activity모아서 관리한 것 밖에 없...

블로그 사이드 카테고리 오류

문제 상황 개인 깃허브 블로그 사이드 카테고리에서 error&bug 카테고리를 눌러도 아무것도 없는 빈 카테고리 페이지로만 이동하는 문제가 발생했다 해결법 블로그 설정 파일들과 카테고리를 만든 파일을 봐도 문제없어서 고민하던 중 error&bug 카테고리가 나오지 않는 사이드바에서는 주소가 error&bug로 출력되고 잘 ...

보조 기억 장치 관리

보조 기억 장치 관리 주 기억 장치는 공간이 제한적이고 전원이 끊어지면 저장된 내용이 사라지는 휘발성 기억 장치이기 때문에 보조 기억 장치를 사용해 영구적으로 데이터를 저장 하지만 보조 기억 장치는 주 기억 장치에 비해 속도가 느리기 때문에 프로그램과 데이터를 효율적으로 저장하고 읽을 수 있는 방법을 찾는 스케줄링이 중요하다 대표적인 보조 ...

Invocation failed Unexpected end of file from server 오류

문제 상황 안드로이드 스튜디오에서 앱 제작한 것을 깃허브에 올리기 위해 커밋 한 뒤 푸시 하니 “Invocation failed Unexpected end of file from server”라며 오류가 발생했다 해결법 환경 설정에서 버전 관리 -> Git -> 자격 증명 헬퍼 사용? 을 체크하니 해결됐다

minimal mistakes toc menu 깨짐

문제 상황 프로세스 관리에 대해 정리하여 글을 적고 깃허브 개인 블로그에 올리니 toc 칸이 일부만 제대로 출력되고 나머지는 깨지는 문제가 있었다 처음에 크롬 개발자 모드로 봤을 때 깨진 부분은 class=”toc__menu”에 벗어나 있길래 블로그 설정 문제인가 해서 설정 파일들에서 toc 부분들을 건드려봤지만 안되길래 찾아보다가 개발...

프로세스 관리

프로세스 관리 자원 자원이란 컴퓨터에서 사용될 수 있는 요소들로 하드웨어,소프트웨어,데이터 구성 요소들을 뜻한다 예시로는 하드웨어 자원 프린터 디스크 메모리 네트워크 자원 소프트웨어 자원 프로그램 유틸리티 프로그램 내의 구성요소 데이터 자원 파일 데이터베이스 프로세스 (process) 프로세스란 ...