Java

Android

Android AES-128 Encryption with Random IV in Java

사실 이 문제는 회사에 들어와 가장 먼저 고민했던 문제였다. 로그인 시, 아이디와 패스워드를 암호화해 전송해야 했기 때문이다. 전에 Google Play Console 여기저기를 누르다보니 SHA 방식의 암호화를 지나치듯 본 기억이 있었다. 짧은 AES 방식 소개하지만 SHA는 복호화할 수 없는 방식이기에 AES 방식을 사용하기로 했다. AES 암호화 방식은 key 값의 길이에 따라 바뀌는데 16바이트이면 AES-128, 32바이트이면 AES-256이 된다. 대신 IV(Initialization Vector)의 길이는 AES-128, AES-256 둘 모두 16바이트로 동일하다. Random IV를 적용해보기여기서 재밌는 기능을 하나 추가해보자. 바로 IV를 매번 random하게 생성하는 것이다. 그리고..

프로그래머스

[PCCE 기출문제] 7번 / 가습기 자바(Java)

이번 문제를 기점으로 0레벨의 PCCE 기출문제 시리즈는 1문제가 남았다. (이래 놓고 언젠가 추가될 수도 있지만) 이번 문제는 함수 이름때문에 스크롤을 이리저리 올렸다 내렸다 하는게 귀찮은 문제였다. 문제 이번 문제는 빈칸 채우기 문제로 설명을 읽기 전에 코드를 먼저 살펴보긴 했다. 코드를 먼저 봤을 때, 함수 내부를 완성하고 main 함수에서 해당 함수들을 적절히 호출하는 문제였다. 풀이 auto, target, minimum에 해당하는 함수를 작성해야 하는데 문제에서는 이름이 func1, 2, 3으로 구분되어 있다. 일단 func2가 auto 모드인 것은 해당 모드 동작과 함수 본문이 같은 로직이므로 직관적으로 파악할 수 있다. 이 때, 빈 칸에 else가 아닌 else if를 적으면 컴파일 에러가..

프로그래머스

문자열 정수의 합 코틀린(Kotlin)

이 문제는 내 블로그에 꾸준히 등장하는 패턴이다. 문자형을 정수형으로 변환하는 게 핵심인데, 코틀린으로 벌써 이 유형을 4번째 풀고 있다. 하지만, 귀신같이 오늘도 헷갈려서 내 블로그를 뒤적였다. 문제를 다같이 보자. 문제 반복문으로 문자열 각 인덱스를 정수형으로 변환해 모두 더하면 끝이다. 풀이 다시 한 번 나에게 상기시키는 메소드지만, Character를 Int로 바꿀 때는 웬만한 상황에서 digitToInt()를 사용하면 된다. 웬만한 상황이라 적은 이유는 코틀린 버전이 낮은 상황(1.5 아래)에선 Character.getNumericValue를 사용해야하기 때문이다. 실행 결과

프로그래머스

[PCCE 기출문제] 6번 / 가채점 자바(Java)

오랜만에 돌아온 PCCE 기출문제 시리즈이다. 이 사이에 있던 문제는 딱히 블로그에 올릴 만한 내용은 없어서 스킵해버렸다. 문제 실행 순서대로 설명해보면 n번 학생이 본인 점수를 질의한다. 그럼 해당 번호에 맞는 점수 두 개를 비교해서 같다, 다르다를 판단한다. 이렇게 정리해볼 수 있겠다. 풀이 원래는 score_list[i]와 같은지 판단하도록 코드가 구성되어있었다. 하지만, i번째를 비교하게 되면 입출력 예시에 대입해볼 때 값이 이상해진다. 학생의 번호 값이 들어있는 numbers 안의 값을 가져와야 하는데 score_list의 0번부터 비교하게 되면 안된다. 그래서 numbers[i] 값을 가져오게 되었는데 이 때, 입출력 예시에서 numbers 값이 1인 경우, our_score에서 비교하는 값이..

프로그래머스

[PCCE 기출문제] 2번 / 피타고라스의 정리 자바(Java)

이번에는 피타고라스의 정리에 관한 문제인데 다들 아는 a제곱 + b제곱 = c제곱 공식을 알고 있는 지에 대해 확인하는 문제같다. 문제 결국 문제에서 요구하는 값은 b제곱인데 이는 보통 c제곱 - a제곱이라는 사실을 알 것이다. 풀이 여기서 이 문제가 특이했던 점은 2줄 이상 수정 시 에러가 난다고 한다. 그래서 한 줄만 수정했더니 저렇게 초록색으로 괜찮다는 표시가 보였다. 내가 수정한 줄의 원본은 int b_square = c - a;였다. 실행 결과

프로그래머스

[PCCE 기출문제] 1번 / 출력 자바(Java)

이 문제를 보고 PCCE가 뭔가 했더니 프로그래머스의 코딩필수역량인증시험이라고 한다. 그래서 기출문제를 하나씩 풀어보고 있다. 다만, 자주 사용하던 코틀린은 없다는게 아쉬울 따름이다. 문제 간단히 말해 주어지는 코드의 빈칸 넣기 문제이다. 풀이 아래 3줄의 프린트문에 맞춰 변수 값을 채워주었다. 정말 언어를 알고 있느냐 수준의 문제였다.

Android

종종 간과하는 문제 해결 에피소드(feat. Handler, Thread)

오늘은 회사에서 마주한 에러를 해결했던 에피소드를 적어보고자 한다. 사실, 되게 사소하지만 크리티컬한 문제였다. 가장 먼저 오늘 마주한 에러를 다시 재현하기 위해 내 노트북에서 샘플앱을 만들었다 ㅋㅋㅋㅋㅋ 마주한 에러 로그를 첨부하겠다. java.lang.RuntimeException: Can't create handler inside thread Thread[Timer-0,5,main] that has not called Looper.prepare() at android.os.Handler.(Handler.java:227) at android.os.Handler.(Handler.java:129) at android.app.Dialog.(Dialog.java:138) at android.app.Dialo..

Language/Java

자바의 상속 - 1

오늘은 자바에서 가장 중요한 것들 중 하나인 상속에 대해 적어보려 한다. 먼저 상속이 뭘까? 상속은 다른 클래스의 설계도를 가져와 새로운 기능을 추가하는 기법이라고 할 수 있겠다. 이 상속 관계에 대한 호칭은 언어마다 다른데 주로 사용되는 호칭을 몇 개 나열해보면 상위 - 하위 부모 - 자식 슈퍼 - 서브 정도가 있겠다. 자바에서 공식적으로 사용하는 호칭은 슈퍼 - 서브인데 개발자들은 부모 - 자식으로도 많이 얘기한다고 들었다. 상속받은 클래스(자식)의 객체를 만들면 자동으로 상속해준 클래스(부모)의 객체도 내부에 같이 생성된다. 이러다 보니 내가 상속받아온 클래스의 멤버를 마음대로 사용 가능하다. 하지만, 저번 글에서도 소개했듯이 객체지향 프로그래밍에서는 멤버 변수를 직접 .연산자를 통해 제어하는 것을..

Language/Java

자바에서의 메소드 - 2

이번 글에서는 자바에서 자주 쓰이는 메소드의 형태를 소개하려고 한다. 오버로딩에 관한 예제 코드이다. 나는 사칙 연산을 Main class에서 하려고 하는데 이 때 Calculator라는 클래스를 새로 설계하여 사용할 것이다. Calculator.java public class Calculator { //멤버 메소드 //더하기 메소드 int sum(int x, int y) { return x + y; } //빼기 메소드 int subtract(int x, int y) { return x - y; } //곱셈 메소드 int multiply(int x, int y) { return x * y; } //나눗셈 메소드 int divide(int x, int y) { return x / y; } //실수형 값에 ..

Language/Java

Java에서의 String 소개 - 2

이번 글은 저번 글에 이어 String class에서 자주 쓰이는 메소드(함수)들을 소개하겠다. //3. 문자열에서 특정 위치의 char 얻어오기 char ch = str.charAt(0); System.out.println(ch); //System.out.println(str.charAt(5)); // error 인덱스번호 벗어남 for (int i = 0; i < 5; i++) { System.out.println(str.charAt(i)); } 이번에 소개할 메소드(함수)는 charAt()이다. 눈치가 빠른 사람이라면 이 메소드의 리턴 타입을 바로 인지했을 것이다. 보다시피 char형이다. String은 내부적으로 문자열을 문자형 배열로 저장한다. 바로 이전 글에서 str을 "Hello"라고 저장했..

BonusTrack02.dev
'Java' 태그의 글 목록