일괄된 문자 타입으로 작업을 하고 싶지만 데이터가 중구난방으로 들어올 경우, 현재 프로젝트 기준으로 통일을 해서 작업을 해야 한다. 현재는 물론 utf-8로 대다수의 프로젝트가 통일되어 있지만 불과 10년전만하더라도 euc-kr로 된 프로젝트들도 많았고, 반대로 utf-8을 euc-kr로 디코딩해야 하는 상황도 있었다. 인코딩(Encode) 하기 URLEncoder.encode(문자, 변환타입); 인코딩을 할때는 URLEncoder를 사용하고 첫번째 파라미터는 변환해야 할 문자 두번째 파라미터는 변환해야 할 타입을 지정한다. 디코딩(Decode) 하기 URLDecoder.decode(문자, 변환타입); 디코딩을 할때는 URLDecoder를 사용하고 URLEncoder와 마찬가지로 첫번째 파라미터는 변환해..
최근 Yaml(야믈이라 부른다) 혹은 Yml이라는 포맷이 뜨고 있는데 Java 진영에서 가장 핫한 Spring Boot에서 Yaml 등을 적극적으로 사용하기도 하며 최근에 나오는 어플리케이션이 Yaml을 종종 사용하기 때문에 사용해보기로 하였다. 필자는 Spring-Boot를 사용하는 일이 없기 때문에 그냥 만들어본 것이며, 보다 자세한 내용이 궁금하다면 Yaml에 관련된 내용을 찾아보면 될 것이다. Yaml은 기본적으로 사람이 알아보기 쉬운 구조로 만들어진 Json의 느낌이 강하다. XML보다 무겁지 않고, 그렇다고 JSON보다 너무 가볍지 않은 중간 정도의 느낌인데 yaml은 최근 들어서 config와 같은 설정 파일에 많이 사용되고 있다. pom.xml (dependency 추가) org.yaml ..
스위치(Switch)문은 If ~ else if ~ else 문과 다르게 잘 활용되지 않는 제어문이다. 범용적으로 활용되는 if문과 다르게 switch문은 유사한 값에 대한 대처인 경우가 많다. 필자의 경우, 프로젝트를 하나 만들 때 Switch문을 아예 안쓰는 경우도 허다하기 때문에 switch 문을 사용하는 방식이 헷갈릴 때가 있을 정도이다. 물론 사람마다 switch문을 선호하여 쓸지 모르겠지만... switch문 구조 switch(입력변수) { case 입력값1: ... break; case 입력값2: ... break; case 입력값3: ... break; default: ... break; } Switch문은 일단 위와 같은 구조로 if와 달리 조건을 입력하는 곳이 단순하다. switch문 ..
FileReader 사실 독자적으로 FileReader를 쓰는 케이스는 많지 않다. 어쩌다 간혹 쓰는 경우는 있지만 보통 다른 파일 리더(Reader)에 포함이 되는 경우가 많은데 속도적인 부분도 있겠지만 한글자씩 읽는 방식이기 때문에 효율적이지 않기 때문이다. 해당 방식은 Java 1.1 부터 사용하기 시작한 고전적인 방식으로 어떤 개념인지만 알고 넘어가도 무방하다. (어차피 활용할 가능성이 매우 적은 방식이다) 생성자 생성자 파라미터 내용 FileReader File 파일객체 File 객체를 지정하여 생성 String 파일명 파일명을 지정하여 생성 주요 메서드 메서드 파라미터 내용 int read() - 스트림에서 한 개의 문자 읽음 void close() - 스트림을 닫고, 리소스 해제 예제 imp..
아이폰(iPhone)과 안드로이드폰(Android)을 둘다 써봤다면 상대적으로 뛰어난 아이폰의 성능에 감탄하는 경우가 많을 것이다. 그런데 아이러니한 것은 아이폰이 안드로이드폰보다 하드웨어적인 부분에서 상당히 부족한 경우가 많다는 것이다. 안드로이드를 만든 업체가 구글이라는 것을 감안할 때, 아이폰과 구글의 SW의 차이가 큰 것인가? 생각하면 잘못된 판단이다. 이는 아이폰의 폐쇄적인 소프트웨어와 안드로이드의 개방적인 소프트웨어의 차이일 뿐이고, 정확히 말해서 컨셉의 차이이다. 안드로이드의 프로그램은 자바(Java) 베이스이다. 한마디로 자바를 할 줄 알면 안드로이드 App을 만드는데 크게 지장이 없다는 소리이다. 반대로 아이폰은 C언어 기반으로 프로그램을 짜야 한다. C언어로 짠 프로그램은 OS에 맞게 ..
이클립스(Eclipse) C, C++, Java, Python 등 언어를 잘 다루기 위해서는 도구의 역할도 매우 중요하다. 최근에는 성능이 좋고 빠른 인텔리J(IntelliJ)가 국내에서도 트랜드를 따라 많이 쫓아오고 있지만 기본적으로 유료 프로그램이며, 솔루션 및 자사 서비스 개발자가 아닌 사람들은 늘 상 프로젝트 특성에 맞게 커스텀 되어있는 도구를 써야 하다보니 대규모 SI가 많은 한국에서는 무료 프로그램인 이클립스를 사용한다. 한국의 SI에 상당수를 차지하는 정부 기반의 프로젝트(전자정부프레임워크, eGovFramework)도 바로, 이클립스를 베이스로 만들었기 때문에 국내 한정으로 이클립스가 인텔리J보다 사용자 풀이 훨씬 많을 것이다. (물론 상당수는 둘다 상황에 맞게 사용한다) 이클립스는 자바로..
자바(Java)의 세상에 들어가기 위해서는 JDK(Java Development Kit, 자바개발키트)라는 개발환경을 설치하고 JVM(Java Virtual Machine)이라는 가상환경을 세팅해야 한다. (JDK를 설치하면 JVM도 세팅이 된다) JDK는 Java를 개발하기 위한 툴들을 모아놓은 소프트웨어라고 이해하면 되고, JVM은 Java가 어느 OS든지 원활히 돌 수 있게 동일한 환경을 만들어주는 역할을 한다. (JVM에 대해서는 다음 포스팅 참조) 원래 자바는 썬 마이크로시스템즈라는 회사에서 만들어 운영하였지만, 오라클(Oracle)이라는 상업용 DBMS를 만들던 회사가 인수를 한 후 현재 많은 소송과 변형된 JDK들이 존재하게 되었다. 비슷한 케이스로 MySQL을 오라클이 역시 인수하면서 유료..
Java에서 상당히 빈번하게 사용되는 것이 split인데 아래와 같은 케이스가 있을 경우 문제가 발생할 수 있다. 예시 String[] values = "1,2,3,4,".split(","); 위와같이 할 경우, values의 length를 체크하면 5개가 나올 것이라 생각할 수 있지만 마지막 값이 비어있을 경우 그 값은 처리를 할 수 없다. 조금더 자세히 보자면 String[] test1 = "1,2,3,4,5".split(","); System.out.println("test1=>" + test1.length); test1=>5 String[] test2 = "1,2,3,4,".split(","); System.out.println("test2=>" + test2.length); test2=>4 St..
기존의 많은 언어들이 제공하는 SUM 기능이 자바에는 없지만 최근에 stream으로 구현하는 방법이 나왔다. 기존의 방식은 for문으로 loop을 돌리면서 한건씩 넣는 방식이었으나, stream을 사용하면 매우 람다 함수를 써서 쉽게 구현이 된다. 그러나 람다 함수가 매우 쉽다가 마구잡이로 사용하면 안되는 것이, 속도적인 측면에서 부정적일 수 있다. 그러니 사이트에 맞게 써야 할 것이다. (일반적으로 stream 람다 방식이 loop 방식보다 속도적인 측면에서 부정적이다) List 값을 합치는 방법 integer로 구성된 list는 아래와 같이 stream 기법을 사용하면 된다.리스트.stream().mapToInt(Integer::intValue).sum(); 123456789public static ..
테스트 용도라든지, 아니면 랜덤성 ID를 만든다던지 기타 등등 랜덤 문자열이 필요한 경우가 있다. 랜덤 문자열을 만드는 방법을 여러가지 있지만, 여기서는 간단하게 랜덤 함수를 만들어서 생성하는 것을 포스팅하고자 한다. public static void main(String[] args) {System.out.println(randomAlphaWord(30));System.out.println(randomAlphaWord(25));System.out.println(randomAlphaWord(40));} /** * int를 받아서, 랜덤 알파벳을 출력함 * * @param wordLength * @return */public static String randomAlphaWord(int wordLength)..
간혹 자바에서 소수점이 지수로 표현되어 이쁘게 나오지 않을 경우가 있다. 이럴 경우 간단하게 지수를 제거하는 방법이 있다. 123456789101112package test; public class main { public static void main(String[] args) { double a = 4.6925784541347777E-4; System.out.println(a); } } Colored by Color Scriptercs 위와 같은 지수 값을 출력하면, 역시나 마찬가지로 4.6925784541347777E-4 지수값이 출력이 된다. 현재 지수는 소수점 4자리를 표현했기 때문에, 소수점 4자리를 표현해보도록 하겠다. 12345678910111213141516package test; imp..
Mysql로 개발을 할 때, 다양한 이유로 인해서 캐릭터셋이 깨지는 경우가 발생한다. DB설정의 문제일수도 있고, Table을 생성할 때 문제일수도 있고, 혹은 Web 단에서 파라미터 전송시 캐릭터셋을 제대로 지정하지 않아서 생길 수 있는 문제도 있다. 이러한 다양한 캐릭터셋 문제를 해결하기 위한 팁들을 포스팅해보고자 한다 톰캣(Tomcat)에서 파라미터가 깨질 경우 흔하디 흔한 방법이다. 톰캣에서 8080 포트에서 캐릭터셋을 지정하면 파라미터가 UTF-8로 인코딩 된다. 1 스프링(Spring)에서 캐릭터가 깨질 경우 스프링에서 개발을 할 때, 캐릭터를 위한 필터링을 web.xml에 설정할 수 있다 1234567891011121314151617181920212223242526272829303132 en..