전체 글

I’m currently learning Android, ComputerScience, Algorithm and etc....
Programming Language/Java

[Java] String, StringBuffer, StringBuilder에 대해서 정리하자

Java에서 문자열을 처리했던 클래스들에 대해서 정리를 해보자. StringJava에서 String은 불변(immutable)한 문자열을 처리하기 위한 클래스이다. 즉, String 객체가 생성되면 그 값은 변경되지 않는다. StringBufferJava에서 StringBuffer는 가변(mutable)한 문자열을 처리하기 위한 클래스이다. 즉, 새로운 문자열을 추가하거나 변경하게 되면 “기존의 객체”로 추가 및 변경이 된다. StringBuilderJava에서 StringBuilder는 가변(mutable)한 문자열을 처리하기 위한 클래스이다.StringBuffer와 마찬가지로 새로운 문자열을 추가하거나 변경하게 되면 "기존의 객체"로 추가 및 변경이 된다.StringBuffer와 다르게 멀티쓰레드 환..

Android/Study

[Android] runOnUiThread()에 대해서 공부해보자

Android Thread에 대해서 알아보자.일반적으로 Thread는 메인 스레드와 백그라운드 스레드로 나누어진다. 메인 스레드앱이 처음 시작되면 시스템이 스레드 하나를 생성하는데 이를 메인 스레드라고 한다. 메인 스레드의 역할은 크게 두 가지로 액티비티의 모든 생명 주기 관련 콜백을 실행을 담당하거나, 버튼, 에디트텍스트와 같은 UI 위젯을 사용한 사용자의 이벤트와 UI드로잉 이벤트를 담당한다. 그렇기 때문에 UI 스레드라과 불린다. 백그라운드 스레드작업량이 큰 연산이나, 네트워크 통신, 데이터베이스 쿼리 등은 처리에 긴 시간이 걸린다. 이 모든 작업을 메인 스레드의 큐에 넣고 작업하면 한 작업이 처리가 완료될 때까지 다른 작업을 처리하지 못하는 현상이 발생한다. 이러한 현상을 피하기 위해서 백그라운드..

Computer Science

[CS] 부동 소수점 오류

부동 소수점 오류에 대해서 알아보기 전에 부동 소수점이란 무엇일까컴퓨터는 모든 수를 0과 1로 이루어진 2진수로 표현한다. 이것은 정수뿐만 아니라 소수점이 존재하는 실수도 마찬가지이다. 정수의 경우 이러한 표현이 간단하지만, 실수를 2진수로 표현하는 것은 복잡하다. 실수를 표현하기 위한 다양한 방법들이 연구되었고 현재는 크게 2가지 방식이 존재한다.고정 소수점 (fixed point) 방식부동 소수좀 (floating point) 방식 고정 소수점 (fixed point) 방식실수는 보통 정수부와 소수부로 나뉘는다. 실수를 표현하는 방법은 소수부의 자릿수를 미리 정하고, 고정된 자릿수의 소수를 표현하는 것이다. 32비트 CPU에서 고정 소수점 방식을 실수로 표현하면 1비트 -> 부호15비트 -> 정수부1..

Programming Language/Kotlin

[Kotlin] BigDecimal 이란

부동 소수점 오류double, float와 같은 Primitive 변수를 사용하다보면 연산결과가 이상하게 나오는 경우가 있다.가령 예를들어서 0.3 + 0.4를 했을 때 0.70000000000000004 라는 결과가 나오는 경우처럼 말이다.이는 소수점을 다룰 때 부동소수점 오류로 인해 소수점이 제대로 표현되지 않는 문제가 발생하는 것이다.float와 double은 부동소수점 표현방식으로 구현 되어있는데, 부동소수점 표현 방식은 고정 소수점 표현 방식에 비해 표현범위가 넓지만 2진수를 사용하기 때문에 소수를 표현할 때 오차가 발생한다. 그래서 이런 문제를 예방하고자 BigDecimal을 사용한다고 한다. 부동소수점 오류에 대해서는 시간이 된다면 더욱 자세하게 정리를 해보겠다. 오늘은 BigDecimal에..

Programming Language/Java

[Java] 객체비교 Comparable과 Comparator

객체비교우리는 자바에서 지원되는 메서드나 혹은 자료구조를 통해서 이미 primitive 변수들을 정렬하는 방법에 대해서는 잘 알고 있다.하지만 객체 즉, 클래스 안에 변수들을 매개로 정렬하는 방법에는 잘 모르는 경우가 있다. 이를 자바에서는 Comparable과 Comparator를 사용하여 정렬한다. 이에 대해서 공부해보자.public interface Comparator { int compare(T o1, T o2);}public interface Comparable { public int compareTo(T o);} Comparable과 ComparatorComparable은 "자기 자신과 매개변수 객체를 비교"하는 것이고, Comparator는 "두 매개변수 객체를 비교"한다는 것이다.Compa..

Programming Language/Kotlin

[Kotlin] const val에 대해서 공부하자

const val 이란Kotlin에서 const val과 val은 모두 불변 변수(immutable variable)를 선언할 때 사용되지만, 사용 목적과 특성이 다르다.const val은 컴파일 시간 상수(compile-time constant)를 선언할 때 사용된다. 이는 변수가 컴파일 시점에 값이 결정되어 있어야함을 의미한다. 특징기본적인 특징으로는 기본형 타입에만 사용이 가능하다(Int, Long, Boolean, String등)클래스의 companion object나 최상위 레벨에서만 선언할 수 있다.컴파일 시점에 값이 결정되므로 성능 면에서는 유리하다.const val MAX_COUNT = 100const val GREETING_MESSAGE = "Hello, World!" 그렇다면 val과는..

Programming Language/Kotlin

[Kotlin] lateinit, lazy 에 대해서 공부하자

Kotlin에서 늦은 초기화 기법클래스에서 "변수를 나중에 사용할 것이다." 라고 명시만 해놓고, 실제로 사용할 시점에 값을 할당하여 사용하는 것을 말한다. 하지만 코틀린에서는 값을 할당해주지 않는다면 변수를 사용하지 못한다. 그래서 Kotlin에서는 nullable를 허용하는데, (null에 대해서는 나중에 또 공부해보자.) 예시로 아래와 같은 코드를 들 수 있다.var str : String? = null 하지만 null은 분명히 위험하다. 또한 예외처리에 있어서 nullable를 허용하지 않는 것이 안전한다. 그렇다면 내가 사용하고 싶을 시점에 사용하는 방법을 어떤식으로 처리를 할까? 그것이 바로 객체 초기화를 늦게 하는 것이다. lateinitlateinit var myString: Stringf..

Android/Study

[Android] onNewIntent()에 대해서 알아보자.

onNewIntent()란 onNewIntent는 안드로이드 액티비티(Activity) 생명주기(LifeCycle)에 속하는 콜백 메소드 중 하나이다. 이 메소드는 현재 액티비티가 이미 생성되어 있고, singleTop, singleTask 또는 singleInstance와 같은 특정 launch mode를 가지고 있을 때, 새로운 인텐트로 인해 액티비티가 다시 시작할때 호출된다. 즉 onNewIntent()는 매니페스트에서 액티비티의 launchMode를 singleTop으로 설정하거나, FLAG_ACTIVITY_SINGLE_TOP 플래그를 썼을 경우, 액티비티 스택의 최상위 액티비티가 새로운 인텐트를 통해 재시작될 때 호출되는 메서드다. 왜 사용하는가? 인텐트 업데이트 : 실행 중이던 액티비티가 새 ..

Android/Study

[Android] OkHttp에 대해서 공부해보자. (feat. Refrofit)

Retrofit에 대한 간단 정리 https://superohinsung.tistory.com/151 [Android] Retrofit Retrofit이란 Retrofit은 안드로이드 앱에서 RESTful API와 통신할 때 사용되는 라이브러리 중 하나입니다. Retrofit은 Square Inc.에서 개발된 오픈 소스 라이브러리로, 안드로이드 앱 개발을 위한 RESTful API superohinsung.tistory.com OkHttp란 OkHttp는 안드로이드 개발에서 인터넷을 통한 데이터 교환을 위해 널리 사용되는 오픈소스 HTTP 클라이언트 라이브러리이다.Square Inc.에 의해 개발되었으며, HTTP 요청을 보내고 받는 것을 간소화하고, 네트워크 속도가 느린 환경에서도 효율적으로 동작하도록..

BaekJoon

[Baekjoon] 17837번 새로운 게임 2 (Java) 문제 풀이 [Gold 2]

문제 https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하 www.acmicpc.net 어떻게 풀 것인가? 이번 문제도 빡 구현이었다. 사실 문제를 처음에 읽었을 때는 그다지 어렵지않다고 생각을 하였으나, 이번에도 생각보다 조건이 까다롭다고 느꼈다. 특히나 2번 빨간색일때, 빨간색인 경우에는 이동한 후에 A번 말과 그 위에 있는 모든 말의 쌓여있는 순서를 반대로 바꾼다. 이 부분을 해결하기 위해서 전체적으로 자료구조를 뒤엎어야만 했다. 그 외 부분은 읽으면서 코드로 옮긴다면..

BaekJoon

[Baekjoon] 17779번 게리맨더링 2 (Java) 문제 풀이 [Gold 3]

문제 https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 www.acmicpc.net 어떻게 풀 것인가? 사실 문제 자체가 길고, 너무 난해해서 어려웠던 문제 하지만, 문제를 이해하고 시키는 조건들을 코드로 바꾼다면 그리 어려운 알고리즘은 없는 그런 문제였다. 즉, 정말 빡센 브루트포스 + 구현 문제였다. 경계선을 구하기 위해서 단지 모든 경우의 수를 계산해야하만 한다. 즉, X,Y,D1,D2 모두를 4중 For문을 통해서 계속해서 경우의 수 모두를 검증하고 답을 찾는 문제였다...

BaekJoon

[Baekjoon] 13335번 트럭 (Java) 문제 풀이 [Silver 1]

문제 https://www.acmicpc.net/problem/13335 13335번: 트럭 입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트 www.acmicpc.net 어떻게 풀 것인가? 구현은 너무나도 어렵다. 특정 알고리즘은 외우면 된다지만, 구현은 생각해야할 것들이 너무나도 많다. 이번 문제는 큐를 이용한 구현 문제였다. 내가 푼 문제의 코드를 뜯어보자. 다리는 Queue로 선언해 준고 여기에 다리의 길이만큼 0을 넣어준다. 다리의 길이만큼 이동하면서 Queue를 계산하게 된다 Queue bridge =..

Tenacity_Dev
인성의 개발 공부 노트