Java(15)
-
[Java - String] 1. 중복 문자 제거하기
주어진 문자열에서, 중복된 문자는 제거하는 코드를 작성하라 apple -> aple banana -> ban 풀이 indexOf 활용 HashSet 활용 stream의 distinct 활용 성능 1. 풀이 1.1. indexOf 활용 문자열 s의 각 문자를 순회하며 StringBuilder sb에 아직 입력되지 않은 문자를 추가한다. 문자가 sb에 포함되어있지 않다면 추가 포함되어있다면 추가하지 않으면 된다. static String removeDuplicates1(String s) { if (s == null || s.isBlank()) { return s; } StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { if (sb..
2023.03.08 -
[Java] override, overload
1. method override 상속하는 클래스에서 상위 클래스(또는 인터페이스)의 메서드를 재정의하는 것 메서드를 재정의 하는 것이기 때문에 final, static 메서드는 오버라이드 할 수 없습니다. protected 이상의 접근 제한자에서 지원됩니다. private 접근제한자는 오버라이드 할 수 없습니다. 서브 클래스의 오버라이드 메서드에서 슈퍼 클래스의 메서드를 호출하고 싶다면 super키워드를 사용하면 됩니다. 오버라이딩은 런타임 시 실질적으로 작동될 메서드가 결정되는 동적 바인딩 방식입니다. 1.1. 예제 1 Java에서 서브 클래스 타입은 슈퍼 클래스 타입으로 받을 수 있습니다. 아래 예제에서는 Animal 타입으로 Cat, Dog 클래스를 받을 수 있습니다. interface Anima..
2023.02.05 -
[Java] Functional Programming - 1. Java 함수형 프로그래밍의 개요와 Stream
함수형 프로그래밍 람다식 함수형 인터페이스 Collection vs Stream 중간 연산, 종료 연산 filter, distinct sorted map flatMap peek 메서드 참조 static method 참조 인스턴스의 인스턴스 메서드 참조 생성자 new 참조 클래스의 인스턴스 메서드 참조 array를 Stream으로 변환하기 1. 함수형 프로그래밍 입력을 넣을 경우 동일한 결과값을 리턴하는 함수와 같은 특징을 갖는 프로그램을 말합니다. 코드의 이해가 쉽고, 유지 보수 및 테스트가 쉽다는 장점이 있습니다. 함수형 프로그래밍의 핵심 개념은 일급 함수, 순수 함수, 고차 함수라는 특징입니다. 1.1. 일급 함수 함수를 값으로 다룰 수 있는 성질로, 변수에 담을 수 있습니다. 함수를 다른 함수의 매..
2022.12.08 -
[JCA] HMAC을 이용한 API Request 변조 검증
HMAC 해시 함수와 HMAC 의 코드 비교 해시 함수 - SHA-256 HMAC - HmacSHA256 1. HMAC Keyed-Hashing for Message Authentication Codes 메시지 변조 여부를 확인하는 MAC에 해싱을 접목한 기술입니다. 비밀키(= 대칭키)를 이용하여 digest를 생성합니다. 대칭키 알고리즘과 해시 알고리즘과는 아래와 같은 차이점이 있습니다. 대칭키 알고리즘은 비밀키를 이용하여 원문으로 복호화가 가능하지만, MAC은 원문으로 복호화할 수는 없습니다. 단방향 해시 알고리즘은 비밀키 없이 digest를 생성하지만, MAC은 digest 생성시 비밀키가 반드시 필요합니다. digest의 무결성 검사는 비밀키를 아는 사람만이 할 수 있고, 무결성 검사는 해시 알고..
2022.07.29 -
[JCA] Hash 함수의 개요와 PBKDF2를 이용한 단방향 해시 알고리즘 구현
Hash Algorithm Hash 함수? MessageDigest 알고리즘 Avalanche effect MessageDigest의 단점 MessageDigest 해시함수 보완 방법 Adaptive Key Derivation Function PBKDF2 bcrypt 1. Hash Algorithm 1.1. Hash 함수? 해시 함수(= 해시 알고리즘) 메시지 인증과 무결성 체크를 위해 이용됩니다. 단방향 암호 알고리즘이기 때문에 해시값을 복호화 할 수 없습니다. 원본 데이터의 내용이 같을 경우 동일한 해시값을 리턴하는 성질을 이용하여 데이터 무결성을 확인합니다. 단독으로 사용할 경우 처리 속도가 매우 빠릅니다. 매우 빠른 처리 속도는 공격자들의 무단 공격에 매우 취약한 단점이 됩니다. 이러한 이유로 비..
2022.07.27 -
[JCA] Cipher 클래스를 이용한 AES 대칭키 암복호화
Cipher 피드백 모드 EBC CBC 코드 예제 SealedObject 객체를 이용한 AES 암복호화 Cipher의 doFinal을 이용한 암복호화 1. Cipher 1.1. 대칭키 암호 알고리즘 대칭키 암호 알고리즘은 동일한 키를 이용하여 암호화/복호화를 하는 암호 알고리즘을 의미합니다. 대칭키는 동일한 키를 정보를 교환할 당사자끼리 교환해야하며, 키가 있을 경우 암/복호화가 가능하기 때문에 이러한 성질 때문에 비밀키라고도 부릅니다. 대표적인 대칭키 암호 알고리즘으로는 AES, Blowfish, Camellia, SEED, ARIA 등이 있습니다. 1.2. Cipher javax.crypto 패키지에 속하며 대칭키 암/복호화 기능을 제공합니다. CipherOutputStream 을 이용하여 byte단..
2022.07.22