전체 글

초보 개발자의 지식 공유의 장
Set 구현체 HashSetSet인터페이스를 구현한 가장 대표적인 컬렉션으로, Set의 특징대로 중복된 요소를 저장하지 않는다.HashSet의 특징을 이용하면, 컬렉션 내의 중복된 요소들을 쉽게 제거할 수 있다.(이미지 출처) ArrayList와 같이 List 인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않으므로 저장순서를 유지하고자 하면 LinkedHashSet을 사용해야 한다.123456789101112131415161718192021public class HashSetTest { public static void main(String[] args){ Integer[] intArr = {4, 4, 5, 6, 1, 1, 1, 2, 2, 3, 3, 7, 8,}; // HashSe..
Base64 인코딩Base64 인코딩은 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식이다. (64개의 문자를 이용하여 바이너리 데이터를 아스키 텍스트 데이터로 표현하기 위해 사용)(이미지 출처)8bit의 데이터를 6bit의 크기로 표현하기 때문에24bit 단위로 하여 3개의 문자에서 4개의 문자를 얻게 된다.위의 예를 보면 이해하기 쉬운데, abc의 문자열을 base64인코딩을하면 YWJj의 문자열을 얻을 수 있다.=> 8bit를 6bit로 쪼개서 Base64색인표를 참고하여 문자열을 보여준다. 만약에 인코딩할 문자가 24bit단위가 아닌 경우에는, '='이라는 문자를 사용한다.'='는 bit 수를 맞추기 위한 특수한 문자이며, bit수를 맞춰주기 위해 0으로 채워지는 패딩을 ..
대화May I help you?* 무엇을 도와드릴까요?I'm looking for The lliad* 일리아스라는 책을 찾고 있어요. 문장Can you check this book for me? * 이 책이 있는지 확인해 주세요.Just a minute. It's in the reading room on the second floor* 잠시만요. 그 책은 2층 열람실에 있어요Who is the author?* 저자의 이름을 말씀해 주세요.Can you tell me where the non-fiction section is?* 비소설은 어느 코너에 있어요?Where is the librarian?* 사서는 어디에 있어요?I'm sorry. They're all out* 죄송해요. 현재 대출 가능한 책이 ..
블록 암호 운용 방식(block cipher modes of operation)암호학에서 블록 암호 운용 방식은 하나의 키에서 블록 암호를 반복적으로 안전하게 이용하게하는 절차를 말한다. 블록암호는 특정한 길이의 블록 단위로 동작하기 때문에, 가변 길이 데이터를 암호화하기 위해서는 먼저 이들을 단위 블록들로 나누어야 하며, 그 블록들을 어떻게 암호화할지 정해야 하는데, 이때 블록들의 암호화 방식을 운용 방식이라 부른다. 초기화 벡터IV(Initialization vector)첫 블록을 암호화할 때 사용되는 값(1단계 앞의 암호문 블록이 존재하지 않으므로 대신하는 비트 블록을 의미) => CBC모드에서 사용암호화 때마다 다른 랜덤 비트열을 이용하는 것이 보통 패딩(padding)마지막 블록이 블록의 길이와..
스트림 암호(Stream Cipher)스트림 암호는 대칭키 암호의 구조 중 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다.일반적으로 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR 하여 1비트의 암호화된 자료를 얻는다.하드웨어 구현이 간편하며 속도가 빠르기 때문에 무선통신의 환경에서 주로 사용된다.대표적인 알고리즘으로는 RC4가 있다.※ 유사난수 : 난수를 흉내내기 위해 알고리즘으로 생성되는 값을 가리킨다. 이때 유사난수를 생성하는 알고리즘을 유사난수 생성기(PRNG)로 부른다. 종류난수열을 암호화할 입력값과 독립적으로 생성하는 경우를 동기식(synchronous)스트림 암호입력값이 난수열 생성에 영향을 끼치는 경우 ..
암호화 알고리즘 종류 암호화에서 사용하는 표현 평문(PlainText) - 암호화 하기전의 메시지 암호문(CipherText) - 암호화된 메시지(해독 불가능) 암호화(Encryption) - 평문을 암호문으로 변환하는 과정 복호화(Decryption) - 암호문을 평문으로 변환하는 과정 암호화는 다음과 같이 분류할 수 있다. 대칭키 암호화 방식[Symmetric Encryption] - 암호화할 때 사용한 키와 복호화할 때 사용한 키가 같은 암호 방식 - 가장 보편적으로 사용하는 알고리즘은 AES 알고리즘이며, 128 ~ 256bit의 키를 사용한다. - 전에는 DES알고리즘을 사용하였으나 취약점이 발견되어 AES암호화 방식을 사용한다. 비대칭키 암호화 방식[Asymmetric Encryption] -..
팩토리빈과 팩토리 메소드 팩토리메소드를 통한 인스턴스 생성은 XML에서 어떻게 표현할 수 있을까? (spring xml factory) 생성자 대신 오브젝트를 생성해주는 코드의 도움을 받아서 빈 오브젝트를 생성하는 것을 팩토리 빈이라고 부른다. 빈 팩토리와 비슷하지만 전혀 다르니 혼돈 ㄴㄴ 팩토리 빈 자신은 빈 오브젝트로 사용되지 않는다. 대신 빈 오브젝트를 만들어주는 기능만 제공해줄 뿐이다. 팩토리 기능을 가진 빈을 통째로 사용하는 방법도 있지만, 특정 빈이나 클래스의 팩토리 메소드를 사용해서 빈을 등록하는 방법도 있다. 1. FactoryBean 인터페이스 new 키워드나 리플렉션 API를 이용해 생성자를 호출하는 방식으로는 만들 수 없는 JDK 다이내믹 프록시를 빈으로 등록하기 위해 FactoryB..
초기화 메소드(initialization method) 초기화 메소드(initialization method)는 빈 오브젝트가 생성되고 DI 작업까지 마친 다음에 실행되는 메소드를 말한다. 오브젝트의 기본적인 초기화 작업은 생성자에서 진행하면 된다. 하지만 DI를 통해 모든 프로퍼티가 주입된 후에야 가능한 작업도 있다. 이런 경우 사용할 수 있는것이 초기화 메소드다. 초기화 메소드를 지정하는 방법은 네 가지가 있다. 1. 초기화 콜백 인터페이스InitializingBean 인터페이스를 구현해서 빈을 작성하는 방법이다. InitializingBean의 afterPropertiesSet() 메소드는 이름 그대로 프로퍼티 설정까지 마친 뒤에 호출된다.하지만 권장되지 않는다. 빈 코드에 스프링 인터페이스를 노출..
StringBuffer아래의 코드를 살펴보자1234567public String joinWords(String[] words) { String sentence = ""; for(String word : words) { sentence += word; } return sentence;}Colored by Color Scriptercs이 코드는 문자열 배열을 하나로 합쳐서 리턴해주는 함수이다. 언뜻보아서는 아무런 문제가 없어보이지만 이 코드의 실행 시간은 어떻게 될까?간단하게 문자열 길이는 전부 x라고 하고 문자열 개수는 n이라고 해보자. 문자열을 연결할때 마다 새로운 문자열 객체가 만들어지고 (sentence), 연결할 문자열의 값이 문자 단위로 복사된다. 그러므로 첫 번째 루프에서 x개의 문자가 복사되고..
ArrayListArrayList는 동적으로 크기가 늘어나는 배열이다. 그러면서도 O(1)의 접근시간(access time)을 유지한다. 배열이 가득 차는 경우, 그 크기가 두배 늘어나도록 구현되어 있다. 크기를 두배 늘리는 시간은 O(n)이지만 자주 일어나지 않기 때문에 O(1)시간이 유지된다고 보면 된다.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778public class CustomArrayList { private int size = 0; private static final int ..
깡냉쓰
평범한 개발자 노트