본문 바로가기

자바12

자바 문법 - 문자열(String 객체) 다루기 자바 문자열은 객체이고 문자열 리터럴은 큰 따옴표로 묶어 표시합니다. String text = "추석에 배를 먹습니다."; 문자열 리터럴도 객체이므로 바로 메소드를 호출할 수 있습니다. int length = "추석에는 배".length(); 1. 문자열 연결하기 자바 문자열을 연결하는데는 + 연산자를 사용합니다. String h = "Hello "; String j = "Java!"; String text = h + j; System.out.println(text); 결과) Hello Java! 자바에서 문자열에 연산을 사용하는데 있어서 주의해야 할 점이 있는데, 자바 문자열은 불변(immutable)이라는 점입니다. 문자열에 연산을 가하면 현재 문자열을 변경되지 않고 변경된 새 문자열이 만들어져서 반.. 2019. 8. 11.
자바 정규식(Regular Expression) 사용하기 앞의 글에서 문자열을 분할하고, 내용을 바꾸는 split(), replaceAll() 메소드에 대해서 알아보았는데, 정규식을 사용하는 예를 들었었습니다. 그래서 자바언어에서의 정규식에 대해서 알아보려고 합니다. 정규식은 문자열에서 특정 패턴을 찾거나 교체, 삭제 등 문자열을 원하는 형태로 편집하는 기능을 제공해 줍니다. 정규식은 자주 사용되지는 않지만, 어떤 경우에 일반적인 로직으로 처리하기 힘든것은 간편하게 처리할 수 있는 힘이 있습니다. 대부분의 언어들이 정규식을 가지고 있는데, 그 사용법들이 조금씩 다른것 같습니다. 자바 문자열 객체(java.lang.String)에서 정규식을 사용하는 자주 쓰는 메소드는 다음과 같습니다. - boolean matches(String regex) 인자로 주어진 정규.. 2019. 8. 10.
자바 문자열에서 특정 문자를 다른 문자로 바꾸기 - replace, replaceAll, replaceFirst 자바언어를 사용해서 문자열내의 특정 문자를 다른 문자로 바꾸는 방법을 알아 봅니다. 이때 주의해야할 사항이 있습니다. 자바 문자열은 불변(immutable)이라는 것입니다. 자바 문자열을 불변이라서 어떤 연산에 의해 원본 문자열이 바뀌지 않습니다. 원본은 그대로 유지되고, 바뀐 문자열이 새로 생성이 되어서 반환됩니다. 그래서 항상 바뀐 문자열을 반환값으로 받아야 합니다. String str = "ABCDE"; String text = str.replace('C', 'F'); 자바 String객체에 문자열에는 문자열을 바꿀 수 있는 다음과 같은 메소드가 제공 됩니다. - String replace(char oldChar, char newChar) 문자열내에 있는 모든 oldChar를 newChar로 바꾼 .. 2019. 8. 8.
자바 문자열을 구분자로 분할하기 - split 자바 언어에서 구분자로 연결된 문자열을 분할하는 방법을 알아봅니다. 예전에는 StringTokenizer 객체를 사용했었는데, JDK 1.4부터 split 메소드를 사용할 수 있습니다. 이게 훨씬 간편합니다. split는 오버로딩 된 두 개의 메소드가 제공되며 정규식을 사용해서 문자열을 분할 합니다. 각각은 다음과 같습니다. - String[] split(String regex) : 인자로 주어진 정규식과 매치되는 문자열을 구분자로 분할합니다. - String[] split(String regex, int limit) : 인자로 주어진 정규식과 매치되는 문자열을 구분자로 분할 합니다. 두 번째 인자로 정규식을 적용하는 횟수를 제한할 수 있습니다. 분할할 구분자를 찾는데 정규식을 사용하므로 복잡한 형태의 .. 2019. 8. 6.
Java에서 JSON 문자열 생성 및 JSON 문자열을 자바 객체로 변환하기 스프링 프레임웍을 사용하면 클라이언트와 JSON 형식의 데이터를 주고 받을 때, Java 객체를 JSON 문자열로 변환하거나, JSON 문자열을 Java 객체로 변환하는 작업은 보통 자동으로 처리되므로 신경쓸 일이 없습니다. 가끔은 이러한 변환 작업을 직접 해야 할 경우가 있습니다. 직접 하는 방법을 알아 봅니다. 1. Jackson 라이브러리를 사용하는 방법 Jackson 라이브러리는 JSON 뿐만 아니라 XML도 변환 해주는 많이 사용되고 있는 라이브러리 입니다. 다음 의존성을 추가해서 사용할 수 있습니다. com.fasterxml.jackson.core jackson-databind 2.8.8 jackson-databind가 jackson-core와 jackson-annotations에 대한 의존성.. 2019. 1. 18.
자바 RSA 암/복호화 사용법 자바 언어에서 비대칭키 방식의 RSA 암/복호화 방법을 알아봅니다. 키생성과 암호화 복호화를 모두 자바 언어로 수행합니다. CipherUtil.java 파일을 1024bit 키를 생성하고, 암호화, 복호화를 지원하는 유틸리티 클래스로 작성되었습니다. 키는 SecureRandom 클래스를 사용해서 임의의 키를 생성합니다. package com.tistory.offbyone.rsa; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchA.. 2018. 10. 22.
Java Generic사용법과 Generic에서의 와일드카드 Java의 Generic은 C, C++의 템플릿과 같은 기능 입니다. 하나의 코드를 다양한 데이터 타입에 대해 사용할 수 있도록 하는 편리한 기능 입니다. 자바에서는 1.5 버전에서 부터 사용할 수 있습니다. 자바에서도 자신만의 Generic 코드를 작성할 수 있지만, 여기서는 자바를 사용하면서 Generic이 가장 많이 사용되는 컬렉션 객체에 대해 알아보고, 좀 특수한 형태인 Generic에서의 와일드 카드에 대해서도 알아봅니다. Java SE 1.5 이전의 자바에서는 자료구조에 데이터를 저장할때 Object 타입으로 저장하였습니다. Object는 모든 객체의 최상위 객체이므로 모든 객체는 Object 타입으로 다룰 수 있습니다. 하지만 객체 자신만의 기능을 사용하기 위해서는 원래 객체로 캐스팅 되어야.. 2018. 8. 12.
Java에서 assert 사용하기 Java에서 단언문 assert는 JDK 1.4 부터 지원합니다. 객체가 아니고 예약어 입니다. 사용법은 두 가지 형식이 있는데, 다음과 같습니다. assert expression1;assert expression1: expression2; 첫 번째는 인자로 boolean으로 평가되는 표현식 또는 값을 받아서 참이면 그냥 지나가고, 거짓이면 AssertionError 예외가 발생합니다. 두 번째는 표현식1이 거짓인 경우 두번째 표현식의 값이 예외 메세지로 보여지게 됩니다. Assertion은 디버깅 용도로 사용되어서 JVM 기본 설정으로 프로그램을 실행하게 되면 assert문은 모두 실행에서 제외 됩니다. assert가 동작하게 하려면 실행시 -ea 옵션을 사용해서 실행합니다. java -ea 클래스명 .. 2018. 5. 4.
자바 MD5, SHA-256, AES256 암호화 하기 java.security 라이브러리를 사용해서 MD5, SHA-256 으로 해시 하는 방법과 AES-256 으로 암호화 하고 복호화 하는 방법을 알아 봅니다. MD5와 SHA-256은 단뱡향 암호화로 비밀번호를 암호화 하거나 데이터 전송등에서 무결성을 체크하는데 사용됩니다. MD5는 128bit로 서로 다른 값에 같은 해시가 발생하는 충돌이 확인 되었고, 빠르게 해시가 가능하므로 비밀번호를 만드는데는 안전하지 않다고합니다. 이제는 SHA-256을 사용하기는 권장하고 있습니다. MD5이던 SHA-256 이던 적절한 길이의 salt와 bcrypt, scrypt 또는 pbkdf2와 같은 느린 알고리즘을 적용하여 무작위 대입 공격에 대한 대비를 해야만 안전한 비밀번호를 만들 수 있습니다. 이글의 예제 에서는 M.. 2018. 4. 25.
자바(Java) - static import 사용하기 자바 클래스의 static 메소드는 클래스에 대한 인스턴스의 생성없이 메소드를 사용할 수 있습니다. 예로 절대값을 구하는 java.lang.Math 클래스의 abs() 메소드는 다음과 같이 클래스명.메소드로 바로 사용합니다. int i = Math.abs(-3); JDK 1.5부터는 이러한 정적(static) 메소드를 더욱 쉽게 사용하기 위해서 static import 를 지원합니다. import static java.lang.Math.abs; int i = abs(-3); 정적 메소드를 import static 을 사용해서 import 한후에 클래스명 없이 abs(); 처럼 바로 사용할 수 있습니다. 주의해야 할 것은 같은 클래스 내에 동일한 이름의 메소드가 있으면 클래스 자신의 메소드가 우선합니다. .. 2018. 4. 23.
Java 에서 난수(random number) 생성하기 Java에서 난수를 발생시키는 방법은 두 가지가 있습니다. java.lang.Math 클래스의 정적메소드인 random() 메소드를 사용하는 방법과 java.util.Random 클래스를 사용하는 방법 입니다. 발생되어지는 난수는 Pseudo Random Number(의사 난수) 입니다. 이상적인 난수에 가까운 난수 입니다. 난수를 발생시킬때는 seed값에 대한 이해가 필요합니다. seed 값이란 간단히 말해서 난수를 발생하는데 기준이 되는 값이라고 생각하면 될것 같습니다. 예로 난수를 발생하는 객체 두 개를 동일한 seed로 생성하면 두 객체가 발생하는 난수는 같은 값이 동일한 순서로 발생되어 집니다. 동일한 조건하의 반복되는 시뮬레이션 등에 사용되어질 수 있겠습니다. 대부분의 경우는 현재 시간등 계속.. 2018. 4. 20.
자바 문법 - 프로그램 기본구조 자바 문법에 대해 알아 보는 첫번째 글로 자바 프로그램의 기본적인 구조에 대해 알아보겠습니다. 자바는 객체 지향 언어(Object Oriented Programming Language) 입니다. 하지만 Smalltalk과 같은 언어처럼 모든 것이 객체이지는 않습니다. 자바에는 기본 타입(primitive type) 이라는 객체가 아닌 타입이 존재합니다. 일단 지금은 객체지향 언어이지만 객체가 아닌 부분도 있다는것만 알아 두면 되겠습니다. 객체 지향 언어에서는 프로그램의 기능을 객체 단위로 만들고, 이 객체들이 상호 작용하여 기능을 수행하도록 되어 있습니다. 현실 세계에서 사람, 책상 등 객체가 상호작용하여 일을 하는 것을 본따서 만들어 졌다고 합니다. 프로그램의 객체는 크게 두 가지 부분으로 나뉘는데, .. 2018. 4. 8.