프로그래밍의 디자인 패턴.


한글화된 문서는 내용이 아직 채워지지 않았으므로 영어 문서를 보는 것을 추천.

출처 - http://kiros33.blog.me/130181116363


Reference

소프트웨어 디자인 패턴 분류

 

안녕하세요.

이번에 소개 해드릴 내용은 디자인 패턴입니다.

이번에는 간략하게 설명만 하고 자세한것은 추후에 다루도록 하겠습니다.

디자인 패턴은 크게 3가지(생성, 구조, 행위) 로 나뉘게 되고요. 각자 세부적인 패턴들이 있습니다.

사실 이미 알게 모르게 다 사용하고 잇는 내용이지요.

 

생성



 

구조



 

행위 



 

위키를 기준으로 텍스트로 다시 정리해봤습니다.

 

생성 패턴(Creational Patterns)

 

 

 

구조 패턴(Structural Patterns)

 

 

 

행위 패턴(Behavioral Patterns)

 




댓글()

자바 문법 문제 2


1.
/*
 * 1. - 주관식 - 기초문법 - 연산자와 키워드 - 중
 * 다음 프로그램 컴파일과 실행시 출력되는 결과는?
 * 
 * -답안
 *  SU MO TU WE TH FR SA
 *              01 02 03
 *  04 05 06 07 08 09 10
 *  11 12 13 14 15 16 17
 *  18 19 20 21 22 23 24
 *  25 26 27 28 29 30 31
 */

package java2_total;

public class GrammerEx1 {
    public static void main(String[] args) {
        final int SUN = 1;
        final int MON = 2;
        final int TUE = 3;
        final int WED = 4;
        final int THU = 5;
        final int FRI = 6;
        final int SAT = 7;

        int start = 1;
        int end = 31;
        int startWeek = THU;
        System.out.println(" SU MO TU WE TH FR SA");
        for (int i = 1; i < startWeek; i++) {
            System.out.print("   "); // "공백3칸"
        }
        for (int i = start, n = startWeek; i <= end; i++, n++) {
            System.out.print((i < 10) ? " 0" + i : " " + i); // (i < 10)?
                                                                // "공백두칸"+i :
                                                                // "공백한칸"+i
            if (n % 7 == 0)
                System.out.println();
        }
    }

}


2.

/*
 * 2. - 주관식 - 기초문법 - 조건문/반복문 - 상
 * 다음은 행렬 곱셈을 구현한 코드이다.
 * 다음 프로그램 컴파일과 실행시 출력되는 결과는?
 * 
 * -생각
 *  {54,0,}
 *  {0,0,}
 *  몰라
 *  
 * -결과
 *  {54,30,}
 *  {165,70,}
 */

package java2_total;

public class GrammerEx2 {
    public static void main(String[] args) {
        int x[][] = { { 3, 2, 3 }, { 5, 9, 8 } };
        int y[][] = { { 4, 7 }, { 9, 3 }, { 8, 1 } };

        int z[][] = Matrix.multiply(x, y);
        Matrix.print(z);
    }
}

class Matrix {
    public static int[][] multiply(int[][] m1, int[][] m2) {
        int m1Rows = m1.length;
        int m1Cols = m1[0].length;
        int m2Rows = m2.length;
        int m2Cols = m2[0].length;

        if (m1Cols != m2Rows) {
            throw new IllegalArgumentException();
        }

        int[][] result = new int[m1Rows][m2Cols];

        for (int i = 0; i < m1Rows; i++) {
            for (int j = 0; j < m2Cols; j++) {
                for (int k = 0; k < m1Cols; k++) {
                    result[i][j] += m1[i][k] * m2[k][j];
                }
            }
        }
        return result;
    }

    public static void print(int[][] a) {
        int rows = a.length;
        int cols = a[0].length;
        for (int i = 0; i < rows; i++) {
            System.out.print("{");
            for (int j = 0; j < cols; j++) {
                System.out.print(a[i][j] + ",");
            }
            System.out.println("}");
        }
    }

}


3.

Colored By Color Scripter

/*
 * 3. - 주관식 - 배열과 컬렉션 - 배열과 컬렉션 - 중
 * 다음 프로그램 컴파일과 실행시 출력되는 결과는?
 * 
 * -생각
 *  set입력 1,2,9,7,4,6,0
 *  정렬 0,1,2,4,6,7,9
 *  
 *  결과 0,1,2,4,6,7,9
 *  
 * -결과
 *  0124679
 */

package java2_total;

import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class CollectionEx3 {
    public static void main(String[] args) {
        String[] arr = { "1""2""9""7""4""6""1""7""0" };
        Set set = new HashSet();
        for (String s : arr) {
            set.add(s);
        }

        List list = new LinkedList(set);
        Collections.sort(list);

        Iterator it = list.iterator();

        while (it.hasNext()) {
            System.out.print(it.next());
        }
    }
}


4.

/*
 * 4. - 주관식 - OOP특징 - 객체의 생성과 사용 - 상
 * 다음 프로그램 컴파일과 실행시 출력되는 결과는? 컴파일시 에러가 발생한다면 라인번호와 그 원인과 해결책을 설명하시오.
 * 
 * -결과
 * 10
 * 10
 */

package java2_total;

public class OopEx4 {
    public static void main(String[] args) {
        Test t1 = Test.getInstance();
        Test t2 = Test.getInstance();
        t1.setX(5);
        t2.setX(10);
        System.out.println(t1.getX());
        System.out.println(t2.getX());
    }
}

class Test {
    private static Test t;
    private int x;

    private Test() {
    }

    public static Test getInstance() {
        if (t == null) {
            t = new Test();
        }
        return t;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

}


5.

/*
 * 5. - 주관식 - OOP특징 - Abstraction - 상
 * 다음 프로그램 컴파일과 실행시 출력되는 결과는? 컴파일시 에러가 발생한다면 라인번호와 그 원인과 해결책을 설명하시오.
 * 
 * -생각
 *  first
 *  second
 *  third
 * 
 * -결과
 *  first
 *  second
 *  third
 */

package java2_total;

public class OopEx5 {
    public static void main(String[] args) {
        Template t = new Test1();
        t.play();
    }
}

abstract class Template {
    void play() {
        first();
        second();
        third();
    }

    abstract void first();

    abstract void second();

    final void third() {
        System.out.println("third");
    }
}

class Test1 extends Template {
    @Override
    void first() {
        System.out.println("first");
    }

    @Override
    void second() {
        System.out.println("second");
    }

}


6.

/*
 * 6. - 주관식 - OOP특징 - 다형성/인터페이스/동적바인딩 - 중
 * 다음 프로그램 컴파일과 실행시 출력되는 결과는? 컴파일시 에러가 발생한다면 라인번호와 그 원인과 해결책을 설명하시오.
 * 
 * -생각
 *  r.test(s);
 *  test()의 매개변수는 Testable. Ship은 Testable를 구현하지 않았으므로 받지 못한다.
 * 
 * -결과
 * r.test(s); //error
 * 
 */


package java2_total;

public class OopEx6 {
    public static void main(String[] args) {
        Car c = new Car();
        Ship s = new Ship();
        Robot r = new Robot();
        r.test(c);
        r.test(s);
        r.test(r);
    }
}

class Elect {
    int value;
}

interface Testable {
}

class Car extends Elect implements Testable {
}

class Ship extends Elect {
}

class Robot extends Elect implements Testable {
    void test(Testable t) {
        if (t instanceof Elect) {
            System.out.println("test하다");
        }
    }

}


7.

/*
 * 7. - 주관식 - Java API - String class, StringBuffer, Wrapper - 중
 * 다음 프로그램 컴파일과 실행시 출력되는 결과는?
 * 
 * -생각
 *  true
 *  true
 *  true
 *  false
 *  false
 * 
 *  찍음..
 * 
 * -결과
 *  true
 *  true
 *  false
 *  true
 *  false
 * 
 * -결과에 대한 생각
 * Integer, String같은 매퍼타입 변수는 equals메소드를 오버라이딩 하여 참조하고 잇는 메모리의 값을 비교.
 * StringBuffer의 equals는 Object의 메소드 그대로 이므로 참조변수의 해쉬값을 비교.
 * 
 * Date역시 equals메소드를 오버라이딩 하였다.
 * d2.equals(d3)경우는 값이 같이 때문에 true
 * d1.equals(d4)는 new Date()한 시간이 서로 다르기 때문에 false.  
 */

package java2_total;

import java.util.Date;
import java.util.GregorianCalendar;

public class ApiEx7 {
    public static void main(String[] args) {
        Integer i1 = new Integer(1);
        Integer i2 = new Integer(1);

        String s1 = new String("one");
        String s2 = new String("one");

        StringBuffer sf1 = new StringBuffer("one");
        StringBuffer sf2 = new StringBuffer("one");

        Date d1 = new Date();
        Date d2 = new GregorianCalendar(2011, 7, 15).getTime();
        Date d3 = new GregorianCalendar(2011, 7, 15).getTime();
        Date d4 = new Date();

        System.out.println(i1.equals(i2));
        System.out.println(s1.equals(s2));
        System.out.println(sf1.equals(sf2));
        System.out.println(d2.equals(d3));
        System.out.println(d1.equals(d4));
    }

}


'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

대충 만들어본 로그 클래스  (0) 2014.05.15
프로그래밍의 디자인 패턴.  (0) 2013.12.12
자바 문법 문제 1  (0) 2013.12.04
OR 연산자의 연산.  (0) 2013.12.03
[JSP] 안보이는 주석  (1) 2013.11.19

댓글()

자바 문법 문제 1

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

OR 연산자의 연산.

a || b;


a가 거짓일 경우 b도 검사하지만


a가 참일경우 b는 검사 하지 않고 참을 출력한다.

댓글()

javascript json 맵 형태로 받았을때 키 이름을 출력하는 방법

웹 & 안드로이드/HTML5|2013. 12. 1. 13:55
1
2
3
4
5
6
var items = { 'one' : 1, 'two' : 2 };
 
for(var name in items){
    alert(name);
}
 

one

 

two 경고창 뜸. 

댓글()

여러개 체크박스를 가져와 개별 클릭 이벤트 체크 하는방법

웹 & 안드로이드/HTML5|2013. 11. 26. 13:40
1
2
3
4
5
6
7
8
9
10
11
$(document).ready(function(){
 
    var subject = $('input[type=checkbox]');
    $(subject).each(function(index, item){
        $(item).click(function(){
        console.log($(item).is(':checked'));
        console.log($(item).val());
        }); 
    });
});
 

댓글()

[JSP] 안보이는 주석

jsp에서 클라이언트에서는 안보이는 주석을 달 수 잇다.


<%-- 주석 내용. --%>



<!-- --> 의 경우에는 html주석이기 때문에 클라이언트에서 소스보기를 하면 보이는 반면,


<%-- --%>는 jsp 주석이기 때문에 클라이언트 까지 가지 않는다.

댓글()

[Mybatis] like 파라메터값과 % 같이 쓰기

ban_name LIKE CONCAT('%', #{value}, '%')

<!-- ORACLE  : '%' || #{value} || '%' -->

댓글()

[JSP] jstl - pageContext.request.contextPath 줄여 쓰기.

<c:set var="myContextPath" value="${pageContext.request.contextPath}"/>
${myContextPath}로 사용

 

댓글()

[Spring]spring 로그인 체크 하는 인터셉터

 

- AdminSessionInterceptor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.test.exam.interceptor;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
import com.test.exam.controller.AdminController;
 
 
//인터셉터를 등록하는 방법은 스프링 3.1이전과 3.2 이후는 다르다. 우리는 3.2이후 방법을 쓴다.
public class AdminSessionInterceptor extends HandlerInterceptorAdapter {
    private static final Logger logger = LoggerFactory.getLogger(AdminSessionInterceptor.class);
    
    @Override
    public boolean preHandle(HttpServletRequest request,
                                        HttpServletResponse response, 
                                        Object handler) throws Exception {
        HttpSession session = request.getSession();    
//        logger.debug(" what user login? : {}", session.getAttribute("whatUser"));
        if((session.getAttribute("whatUser") != "admin"
            || (session.getAttribute("sessionAdmin") == null)){
            response.sendRedirect(request.getContextPath()+"/");
            return false;
        }
        return super.preHandle(request, response, handler);
    }
}


-root-context.xml
1
2
3
4
5
6
7
8
9
10
11
12
    <!-- interceptor 설정. -->
    <interceptors>
    
        <!-- admin session interceptor 설정. -->
        <!-- 어드민 로그인을 체크하고 로그아웃 상태일 경우 메인페이지로 보내는 인터셉터를 등록. -->
        <interceptor>
            <!-- /admin/* 형태의 요청에 한해서만 인터셉트 적용 -->
            <mapping path="/admin/**/*"/>
            <beans:bean class="com.test.exam.interceptor.AdminSessionInterceptor"/>
        </interceptor>
        
    </interceptors>

인터셉터는 필터의 역할과 같다.

요청, 응답, 응답후의 상황엥 처리가 가능하도록 메소드가 존재한다.

preHandler는 요청시에 처리하도록 한다.



 - 위의 로그인 처리는 필터로 가능하나 사용하기에는 좀더 유용한것 같다.


댓글()