숫자섞기 알고리즘
0에서 9까지의 값을 저장하고 있는 배열 데이터를 섞는 알고리즘 초간단, 심플
- 프로그래밍
- · 2013. 10. 17.
웹 개발을 진행하다 보면 대부분 url mapping 설정을 ant pattern으로 한다. 스프링에서 mvc:resources mapping="/static/**" 또는 security:intercept-url pattern="/user/**" 이 그러하다. 설정에 대한 표현식으로 ant pattern을 사용하기 때문에 *, **, ? 의 의미를 확실히 알아둘 필요가 있다. ? : 1개의 문자와 매칭 (matches single character) * : 0개 이상의 문자와 매칭 (matches zero or more characters) ** : 0개 이상의 디렉토리와 파일 매칭 (matches all files / directories)
0에서 9까지의 값을 저장하고 있는 배열 데이터를 섞는 알고리즘 초간단, 심플
SiteMesh는 오픈 소스이고 페이지 레이아웃 프레임워크이다.이와 비슷한 프레임워크는 Tiles, Velocity 등이 있는데 SiteMesh는 처음 써봐서 샘플 코드를 만들어 봤다.이미지 출처 전체 소스 코드 : https://github.com/namkyu/sitemesh_test sitemesh를 위한 설정은 어렵지 않다.1. pom.xml에 라이브러리 추가2. web.xml에 com.opensymphony.sitemesh.webapp.SiteMeshFilter 필터 추가3. WEB-INF/decorators.xml 파일 생성 후 설정 추가 (페이지 레이아웃 설정 및 URL 패턴 정의)/jsp/*4. 페이지 레이아웃 구성HeaderNavigationFooter 설정을 마치고 sitemesh의 작동..
상용 서비스가 되고 있는 상태에서 고객의 요구 사항으로 인하여 자바 데몬 형식의 프로그램을 개발해야 할 때가 있다.이런 프로그램들은 대게 상용 리눅스 장비에 class 파일을 올린 후 java 명령어를 통해 프로그램을 실행하게 되는데 이것이 생각보다 어렵다.예전에도 class 파일을 실행하기 위해 몇 번 삽질을 했었는데 어김없이 또 삽질을 하게 되었다.사실 자바를 처음할 때 배우는 것들인데 이런 삽질을 하는 내 모습을 보면 쪽팔리기도 하다.그래서 이참에 확실하게 정리를 하고자 한다. 두 가지 방법에 대해서 설명을 할 것이다.첫 번째는 "패키지 선언되어 있는 java 파일 컴파일 후 실행하기"두 번째는 "외부 jar 파일을 classpath에 추가한 후 컴파일하고 실행하기" 첫 번째의 경우는 JDK에서 기..
나는 주로 스프링이 제공하는 테스트 컨텍스트 프레임워크 JUnit 확장 기능을 이용하여 테스트 코드를 작성한다. service 로직 -> DAO 로직 -> myBatis query 또는 DAO 로직 -> myBatis query 와 같이 두 가지 케이스의 테스트 코드를 많이 작성하게 되는데 이번에 service layer에 해당하는 클래스만 테스트 코드를 작성하는 방법에 대해서 알아보게 되었고, 토비의 스프링 3.1 스터디 기간에 학습했던 mockito를 사용해 보기로 했다. Mock 객체를 쉽게 제공하고 사용할 수 있는 여러 프레임워크가 있는데 그 중 mockito가 인기가 좋다고 한다. 사실 다른 Mock 프레임워크를 사용해 보지 못해 잘 알지는 못하지만 다른 분들의 경험적 지식과 구글 트렌드 조사를..
기존에 개발되어 있는 소스 코드를 보다 보니 implements java.io.Serializable과 같이 Serializable 인터페이스를 구현하는 VO(Value Object) 클래스들이 많이 보인다. 혹시 RMI(Remote Method Invocation) 통신이나 네트웍 통신을 할 때 직렬화를 사용하여 연동을 하나? 싶었지만 아니였다. 원인을 알고 싶었지만 개발된지 이미 5년이 넘은 시스템이고, 개발자는 5대째 계승되고 있는 시점이다. 결국 Serializable interface가 왜 구현되어 있는지는 모르겠지만 아마 습관적으로 붙이지 않았나 싶다. 이런 코드를 보니 나 조차도 Serializable에 대해 자세히 알고 있나라는 생각을 가지게 되었고, 한번쯤은 정리를 해봄으로써 확실히 알아..
이번에 인턴 사원 멘토링을 맡게 되면서 교육을 진행하고 있는데 재귀함수에 대해서는 잘 이해를 못하는 것 같아 시퀀스 다이어그램을 그려보았다.재귀함수를 어떻게 그리면 좋을까 생각한 끝에 아래와 같은 결과물이 나왔는데 인턴 사원이 잘 이해할 수 있을랑가 모르겠다. [시퀀스 다이어그램]
369 게임 알고리즘을 작성해 보았다. 문제는 우리가 아는 게임과 동일하다. 3 이라는 숫자를 부르면 박수 한 번.6 이라는 숫자를 부르면 박수 한 번.9 이라는 숫자를 부르면 박수 한 번.33 이라는 숫자를 부르면 박수 두 번.369 라는 숫자를 부르면 박수 세 번. 위의 문제에 대한 알고리즘은 무엇일까? 주어진 숫자의 자릿수마다 3, 6, 9라는 값이 포함되어 있는지 확인 후 count를 하면 된다. String의 indexOf를 이용하여 값의 포함 여부를 확인하려고 했지만 너무 쉬운 것 같아 다르게 문제를 풀어보았다.
자바의 접근 제어자는 다른 클래스로부터 정보와 데이터의 접근을 제어한다.public : 어떤 클래스에서도 접근이 가능private : 외부의 어떤 클래스에서도 접근이 불가능protected : 같은 패키지 및 상속 받은 클래스에서 접근 가능.default : 같은 패키지에 있는 클래스에서만 접근 가능 여기서 protected, default 접근제어자를 사용할 때 주의해야 할 점은 꼭! 같은 패키지여야만 한다는 것이다.예를 들어 A 패키지에 존재하는 Board 클래스에 default 접근제어자로 선언되어 있는 add 메소드가 존재하고, A 패키지 하위에 B 패키지가 존재한다면. B 패키지 안에 있는 NoticeBoard 클래스에서 A 패키지에 있는 Board 클래스의 add 메소드에 접근할 수 없다. 즉..
정규표현식은 특정한 규칙을 가지는 문자를 표현하는데 사용하는 형식 언어이다.정규표현식을 잘 모를 때에는 validation 체크가 상당히 고단하고, 지루했지만 정규표현식을 자유 자재로 다룰 줄 알게 되면 상당한 시간을 단축할 수 있고, 유용하며 코드가 깔끔해 진다. 가끔 표현식을 까먹는 경우가 있어 이곳에 표로 정리를 하고, 각 표현식에 대한 테스트 케이스를 만들어 보았다. 표현식 설명 ^ 문자열의 시작 $ 문자열의 종료 . 임의의 한 문자 (문자의 종류 가리지 않음) 단, \ 는 넣을 수 없음 * 앞 문자가 없을 수도 무한정 많을 수도 있음 + 앞 문자가 하나 이상 ? 앞 문자가 없거나 하나있음 [] 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 ..
enum을 이용하여 클래스를 정의하면 어떤 원리에 의해서 싱글톤으로 제공하는지, 그리고 멤버 변수가 있는데도 thread-safe한지 그 이유에 대해서 알아봤다. public enum EnumClassTest { INSTANCE1("instance1"), INSTANCE2("instance2"); static {System.out.println("init!!");} private String objName; private EnumClassTest(String objName) {this.objName = objName;} public String getObjName() {return objName;} public static void main(String[] args) {EnumClassTest[] typ..
"클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다" 난 위의 OCP 정의를 처음 접했을 때 이해가 되지 않았다.헌데 토비의 스프링3.1 책을 읽게 되면서 그 의미를 이해하게 됐고, 내가 이해한 것을 토대로 예제 코드를 작성해 보고 싶었다. 아래 예제 코드는 실제 OCP 원칙을 지키지 않은 상태에서의 코드를 보여 줄 것이며 이로 인하여 발생되는 문제에 대해서 설명한다.그런 후 OCP 원칙을 잘 지키는 코드를 설계하여 개방 폐쇄 원칙이라는 것이 얼마나 코드를 유연하고, 확장성 있게 만드는지 알아볼 것이다. 예제는 컴퓨터와 키보드 이 두 가지를 이용하여 설명할 것이다.컴퓨터가 부팅을 하면서 키보드를 연결하는 상황이며, 실제 아래와 같이 컴퓨터 소프트웨어를 설계하고 납품을 하게 된다면 어떤..