POJO란 무엇인가?

Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다(위키피디아)

POJO의 필수 요소로는 가볍고, 유연하고, 간단명료 함이 있다.

장점 :

  • 특정 프레임워크에 종속되지 않은 프로그래밍.
  • 모든 java 프로그램에서 사용이 가능하다.
  • 특정 프레임워크에 종속되지 않기 때문에 테스트가 자유롭다.

규칙

  • 멤버변수의 접근자는 private
  • 멤버 변수마다 getter/setter 가 존재
  • getter/setter 메소드의 접근자는 public

POJO 클래스는 가독성과 재사용 성을 높이기 위해 객체를 정의하는 데 사용되므로 Bean과 유사합니다. Bean에는 몇 가지 제한이 있지만 POJO 파일에는 특별한 제한이 없다는 유일한 차이점이 있습니다.

 

JAVA POJO 예시코드

public class pojo {  
private String name;  
private String id;  
private double sal;  
public String getName() {  
    return name;  
}  
public void setName(String name) {  
    this.name = name;  
}  
public String getId() {  
    return id;  
}  
public void setId(String id) {  
    this.id = id;  
}  
public double getSal() {  
    return sal;  
}  
public void setSal(double sal) {  
    this.sal = sal;  
}  
}

 

POJO vs Bean

Pojo에는 Java 규칙 외에 특별한 제한이 없습니다. Java 규칙 이외의 몇 가지 특별한 제한 사항이있는 특수 유형의 POJO 파일입니다.
Bean에 비해 필드에 대한 제어가 적습니다. 필드에 대한 완전한 보호를 제공합니다.
POJO 파일은 Serializable 인터페이스를 구현할 수 있습니다. 그러나 필수는 아닙니다. Bean 클래스는 Serializable 인터페이스를 구현해야합니다.
POJO 클래스는 이름을 사용하여 액세스 할 수 있습니다. Bean 클래스는 getter 및 setter를 사용해야 만 액세스 할 수 있습니다.
필드에는 public, private, protected와 같은 액세스 수정자가있을 수 있습니다. 필드는 개인 액세스 권한 만 가질 수 있습니다.
POJO에서는 인수가없는 생성자가 필요하지 않습니다. 가질 수도 있고 없을 수도 있습니다. 인수가없는 생성자가 있어야합니다.
POJO 사용에 대한 불이익은 없습니다. Bean 사용의 단점은 Default 생성자와 public setter가 불변이어야 할 때 객체 상태를 변경할 수 있다는 것입니다.

'코딩이야기 > JAVA' 카테고리의 다른 글

Callable 비동기 삽질 방지  (0) 2021.01.26
[JAVA]  (0) 2020.06.29
[JSP&Servlet]  (0) 2020.05.28
[JAVA]입출력  (0) 2020.05.01
[JAVA] 람다식  (0) 2020.04.29

아래와 같은 API 유닛테스트 호출시 Data 값이 없이 나왔다...

@GetMapping("/role/list")
	@ResponseBody
	public Callable<Object> getRoleList(@RequestParam Map<String, Object> paraMap) {
		System.out.println("paramap ::"+paraMap);
		return () -> roleManagementService.getRoleList(paraMap);
	}

검색및 질문결과 

MockMvcResultHandlers.print()  로 찍었을때 Data 가 비어서 나타났다.

'Callable' 요 친구가 비동기 처리 방식이기때문에 위에 방식으로는 결과값을 알 수 없었다.

해당 값을 확인하기 위해 getAsyncResult() 비동기처리의 결과값을 확인할 수 있었다.

 

여기서 궁금증... 동기 및 비동기의 차이점은 무엇인가

 

'코딩이야기 > JAVA' 카테고리의 다른 글

POJO 란 무엇인가?  (0) 2021.02.16
[JAVA]  (0) 2020.06.29
[JSP&Servlet]  (0) 2020.05.28
[JAVA]입출력  (0) 2020.05.01
[JAVA] 람다식  (0) 2020.04.29

.Java Collection Framework Injection (자바 컬렉션 주입)

----------------------------------------------------------------------------------------

- 빈을 정의할 때 주입해야 하는 멤버가 컬렉션인 경우에 컬렉션이 관리해야할 객체를 초기에 설정할 수 있습니다.

- List, Map(k, v), set, Property를 사용합니다.

 

- Collection(순서나 집합적인 저장공간(

   1)List : 순서가 있는 저장공간, 데이터의 중복 허용

     Stack : LIFO, FILO : 고정적인 메모리 크기를 지닌다.

     Vector(100, 10) : 가변적인 메모리 크기, 동기화 보장, 잘 쓰이지 않음

     ArrayList : 아주 큰 데이터 저장공간, 동기화 보장 X, 속도가 빠르고 크기를 마음대로 조정가능

                   단방향 구조이므로 순차적인 접근이 가능 합니다.

     LinkedList : 양방향 구조, 삽입과 삭제가 아주 용이 합니다.

                     Stack, queue, Deque 만들기 위한 용도로 사용합니다.

                     운영체제 개발, C#, .NET

   2) Set : 순서의 개념이 없고, 데이터 중복 허용 X

       HashSet : 대표적인 클래스, 가장 빠른 접근속도, 순서를 전혀 예층 불가능

       LinkedHashSet : 추가된 순서 또는 가장 최근에 접근한 순서대로 접근 가능

       TreeSet : 정렬된 순서대로 보관하며, 정렬 방법을 지정할 수 있다.

       SortedSet : 정렬

   

  3) Map(key, value)

      key는 중복 허용 X , value는 중복 허용

      Hshtable : 동기화 보장, HashMap보다 느리지만 동기화가 지원된다.

                    키와 값으로 null이 허용되지 않음.

      HashMap : 동기화 보장, TreeSet

                     Map 인터페이스를 구현하기 위하여 해쉬테이블을 사용한 클래스

                     중복허용하지 않고, 순서도 보장하지 않습니다.

                     키와 값으로 null이 허용 됩니다.

      TreeMap : 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장

                    정렬된 순서로 키와 값을 저장하므로 빠른 검색이 가능합니다.

                    그러나, 저장시에는 오름차순을 하기 때문에 저장시간이 다소 오래 걸립니다.

 

      LinkedHashMap : HashMap을 상속 받습니다.

            Map에 있는 Entry들의 연결 리스트를 유지 하므로 입력한 순서대로 반복이 가능합니다.

 

      SortedMap : 정렬(TreeMap)

 

  4) Property : Spring 3.X 사용

      Hashtable 의 상속을 받아 구현

      해쉬테이블은 키와 값(Object, Object)으로 저장

      프로퍼티는  (String, String)형태로 저장

      주로 애플리케이션의 환경설정과 관련한 속성을 저장하는데 사용

      데이터를 파일로부터 일고 쓰는데 편리한 기능 제공합니다.

 

 

'코딩이야기 > JAVA' 카테고리의 다른 글

POJO 란 무엇인가?  (0) 2021.02.16
Callable 비동기 삽질 방지  (0) 2021.01.26
[JSP&Servlet]  (0) 2020.05.28
[JAVA]입출력  (0) 2020.05.01
[JAVA] 람다식  (0) 2020.04.29

.Model1과 Model2의 개념

-Model1 정리
1. 브라우저 요청(Request)
2. JSP(요청을 받아서  javaBeans(Setter) 또는 ActionTag(setProperty)를 이용)가 처리
3. 데이터 베이스(저장 및 출력: Setter&Getter)
4. JSP(받은요청을 처리  javaBeans(Getter) 또는 ActionTag(getProperty)를 이용)가 처리
5. 브라우저 응답(Response)

-Model2
1. 브라우저 요청(Request)
2. Servlet(요청을 받아서  javaBeans(Setter) 또는 ActionTag(setProperty)를 이용)가 처리
3. 데이터 베이스(저장 및 출력: Setter&Getter)
4. Servlet(요청을 받아서  javaBeans(Getter) 또는 ActionTag(getProperty)를 이용)가 처리
5. JSP(View)

6. 브라우저 응답

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

 

<%@ page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="Error.jsp"%>

 

 

<%  	.........      %> : 자바 코드
<%!-- ........... --%>  : 선언문: 클래스변수와 클래스 메소드
<!--  ..........  --> : 주석
<%=  %> : 표현식

 

 

     

request

javax.servlet.http.HttpServletReuest

웹 브라우저의 요청 정보를 저장하고 있는 객체

response

javax.servlet.http.HttpServletResponse

웹 브라우저의 요청에 대한 응답 정보를 저장하고 있는 객체

out

javax.servlet.jsp.jsp.Writer

jsp페이지에 출력할 내용을 가지고 있는 출력스트림

session

javax.servlet.http.httpSession

하나의 웹브라우저의 정보를 유지하기 위하여 세션정보를 저장하고 있는 객체.

application

javax.servlet.ServletContext

웹애플리케이션 context의 정보를 저장하고 있는 객체

include

<jsp:include>

다른페이지의 실행결과를 현재 페이지에 포함하여 사용.

forward

<jsp:forward>

페이지 사이의 제어를 이동 시킬 때 사용.

uesrBean

<jsp:useBean>

자바빈을 JSP페이지에서 사용

setProperty

<jsp:setProperty>

속성의 값을 설정하기 위하여 사용.

getProperty

<jsp:getProperty>

 

 

 

'코딩이야기 > JAVA' 카테고리의 다른 글

Callable 비동기 삽질 방지  (0) 2021.01.26
[JAVA]  (0) 2020.06.29
[JAVA]입출력  (0) 2020.05.01
[JAVA] 람다식  (0) 2020.04.29
[JAVA] 벡터  (0) 2020.04.29

자바 입출력의 개요

-------------------------------------------------------------------------

- java.io패키지는 사용자가 작성한 자바 프로그램에서 입력 및 출력을 할 수 있도록 도와주는 클래스들을 포함하고 있다.

- java.io.InputStream클래스를 중심으로 하는 입력 스트림과

- java.io.OutputStream클래스를 중심으로 하는 출력 스트림이 있다.

 

1. InputStream 클래스

-----------------------

모든 입력 스트림 클래스의 슈퍼 클래스로 기본적인 입력에 관련된 메쏘드들을 제공한다. 

이 클래스는 abstract 클래스로 new 연산자나 newInstance() 메소드를 이용하여 직접적으로 객체를 생성할 수 없다. 

 

int available() - 블록킹이 되지 않고 읽을 수 있는 바이트의 수를 넘겨준다. 

void close() - 스트림을 닫는다. 

void mark( int readlimit ) - 스트림내의 현재 위치에 표시를 해둔다. 

boolean markSupported() - 스트림이 마크/리셋을 지원하는 가를 판별한다. 

abstract int read() - 스트림으로부터 한 바이트를 읽어서 넘겨준다. 

int read( byte b [] ) - 스트림으로부터 바이트의 배열만큼 읽어서 b에 채워 준다. 

int read( byte b[] , int off, int length ) - 스트림으로부터 length만큼 읽어서 b의 off부터 채워줌.

void reset() - 최근에 마크된 위치로 스트림을 재위치시킨다. 

long skip( long n ) - 지정한 바이트 수만큼 건너뛴다. 

 

2. OutputStream 클래스

------------------------

이 클래스는 모든 출력 스트림 클래스들의 슈퍼 클래스이며, abstract 클래스라 new 연산자나 newInstance()메소드를 이용해서 직접적으로 객체를 생성할 수 없다. 대부분의 출력 스트림 클래스는 이 클래스와 멤버가 비슷하다. 

 

void close() - 스트림을 닫는다. 이 스트림과 관련되었던 시스템자원도 모두 돌려준다. 

void flush() - 스트림에 의해 쓰여진 buffer에 있던 내용을 강제적으로 출력한다. 

void write( byte b[] ) - 스트림에 b.length만큼 쓴다. 

void write( byte b[], int off, int length ) - 스트림에 b의내용을 off부터 length만큼 쓴다. 

abstract void write( int b ) - 스트림에 한바이트를 쓴다. 

 

 

입력스크림 클래스들

-----------------------

3. File클래스

- 파일에 대한 기본적인 정보를 제공해 주는 클래스이다.

- 파일의 크기나 날짜등 파일 자체 정보와 실제로 파일 입출력과는 관계가 없다.

 

[File생성]

File dukcifile=new File("c:javadukci.doc");

File dukciDir=new File(c:java");

 

4. FileInputStream클래스

- 파일을 입출력 하고자 한다면 이 클래스를 사용한다.

- 순차젓인 방법으로 파일의 데이터를 한 바이트씩 가져올 수 있다.

 

[FileInputStream 생성]

File dukciFile = new File("c:javadukci.doc");

FileInputStream file=new FileInputStream(dukciFile);

또는

FileInputStream file=new FileInputStream("dukci.doc");

 

5. DataInputStream클래스

- 이 클래스는 자바에서 사용되는 기본 데이터 타입으로 바로 읽어들일 수 있으며 라인 단위 입 력 처리를 할 수 있다.

 

[DataInputStream 생성]

String line;

FileInputStream in = new FileInputStream("dukci.txt");

DataInputStream dis = new DataInputStream(in);

while((line=dis.readLine())!=null)

 

6. 그밖의 입력스트림 클래스

 

ByteArrayInputStream 클래스 

이 클래스의 객체는 별도의 입력장치가 아닌 byte의 배열에서 자료를 읽어 들인다. 

다른 입력 스트림들과 달리 이 클래스의 입력 메소드들은 block되지 않는다. 

 

PipedInputStream 클래스

이 클래스는 파이프의 양 끝을 이용해서 서로 통신할 경우 사용되는데, 한 쓰레드가 파이프의 한쪽을 이용해서 데이터를 보내면 다른 쓰레드가 다른 파이프의 한쪽을 이용해서 데이터를 읽어 들일 수 있다. 

 

PushbackInputStream 클래스 

이 클래스는 1바이트 push back buffer를 제공하는 입력 스트림 필터로, 응용 프로그램에서 마지막으로 읽은 한 문자를 "unread"할 수 있다. 따라서 "unread"한 문자는 다시 읽어 들일 수 있다. 

 

 

1. ByteArrayOutputStream 클래스

이 클래스는 바이트 배열에 출력을 하기 위한 출력 스트림을 가진다. 

버퍼는 쓸 때 자동적으로 그 크기가 증가된다. 

 

2. DataOutputStream 클래스

이 클래스는 간단한 방식으로 출력 스트림에 자바 기본 데이터형을 출력하는데 유용하다. 

 

3. PipedOutputStream 클래스

이 클래스는 파이프의 보내는 쪽에 위치한다. 

두 쓰레드간의 통신에서 이 클래스는 보내는 쪽에 위치해서 데이터를 보내는 역할을 한다. 

 

4. PrintStream 클래스

이 클래스는 주로 텍스트로 출력 데이터를 출력하기 위해서 디자인되었다. 

이 클래스에는 다수의 print()와 println()메쏘드가 각각 매개 변수로 서로 다른 자료형을 받아들이도록 overload 되어 있다. 

코드의 구현은 println()메쏘드는 print()메쏘드를 이용하도록 되어 있고, print()메쏘드는 write()메쏘드를 이용해서 출력하도록 되어 있다. Println()메쏘드와 print()메쏘드는 줄 바꿈 기능의 여부이다.

 

5. FileOutputStream 클래스

이 클래스는 파일로 출력을 하기 위해 사용된다.

쓰기 위한 메쏘드들은 OutputStream 클래스와 같다.

 

 

 

* Data 입.출력 처리

 

  import  java.io.*;

 

o 스트림(Stream) : 데이터의 흐름

 

Stream - Byte Stream           -  입력 (InputStream)

        (1Byte 단위로 데이터를

         전송하는 스트림)         출력 (OutputStream)

 

 

         Text Stream               -  입력 (Reader)

         (2Byte 단위로 데이터를

          전송하는 스트림)         -  출력 (Writer)

 

 

o Byte Stream에 관련된 클래스(1Byte 입.출력 처리)

 

  InputStream  - FileInputStream

  (입력)         FilterInputStream  -  BufferedInputStream

               DataInputStream

                                       ObjectInputStream

 

  

  OutputStream - FileOutputStream

  (출력)         FilterOutputStream  -  BufferedOutputStream

DataOutputStream

PrintStream

         ObjectOutputStream

 

 

o Text Stream에 관련된 클래스(2Byte 입.출력 처리)

 

  Reader - BufferedReader

  (입력)      InputStreamReader - FileReader

 

  Writer - BufferedWriter

  (출력)      OutputStreamWriter - FileWriter

              PrintWriter

'코딩이야기 > JAVA' 카테고리의 다른 글

[JAVA]  (0) 2020.06.29
[JSP&Servlet]  (0) 2020.05.28
[JAVA] 람다식  (0) 2020.04.29
[JAVA] 벡터  (0) 2020.04.29
[JAVA]컬렉션  (0) 2020.04.29

 람다식(Lambda Expression)
  메소드를 하나의 식으로 표현한 것입니다.
 람다식 장점
 1. 코드를 간결하게 만들 수 있습니다.
 2. 코드가 간결하고 식에 개발자의 의도가 명확히 드러나므로 가동성이 향상됩니다.
 3. 함수를 만드는 과정없이 한번에 처리할 수 있기에 코딩하는 시간이 줄어듭니다.
 4. 병렬프로그래밍이 용이합니다.
 
 람다식 단점
 1. 람다를 사용하면서 만드는 무명함수는 재상용이 불가능합니다.
 2. 디버깅이 다소 까다롭습니다.
 3. 람다를 남발하면 코드가 지저분해질 수 있습니다.
  (비슷한 함수를 계속 중복생성할 가능성이 높음)
 4. 재귀로 만들경우에는 다소 부적합한면이 있습니다.
 메소드
 int min(int x, int y) {
 reutrn x }
 
 람다 표현식
 (
 이러한 람다 표현식은 메소드의 매개변수로 전달될수도 있으며, 메소드의 결과값으로 반환될 수도 있습니다.
 따라서 람다 표현식을 사용하며면, 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높혀줍니다.
 
 Java SE 8부터는 이러한 람다 표현식을 사용하여 자바에서도 함수형 프로그램밍을 할수 있게 됩니다.
 
 함수형 인터페이스(functional interface)
 람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야만 합니다.
 
 문법
 참조변수의 타입 참조변수의 이름 = 람다표현식
 
 위의 문법처럼 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입을 함수형 인터페이스라고 부릅니다.
 함수형 인터페이스느 추상 클래스와는 달리 단 하나의 추상 메소드만을 가져야 합니다.
 또한, 다음과 같은 어노테이션(annotation)을 사용하여 함수형 인터페이스임을 명시할수 있습니다.
 
 문법
 @FunctionalInterface
 
 위와 같은 어노테이션을 인터페이스의 선언 앞에 붙이면, 컴파일ㄹ러는 해당 인터페이스를 함수형 인터페이스로 인식합니다.
 자바 컴파일러는 이렇게 명시된 함수형 인터페이스에 두개 이상의 메소드가 선언되면 오류를 발생십킵니다.

 

package GericCollection;

import java.util.Scanner;


@FunctionalInterface
interface Calculator{
	public int min(int su1, int su2);
	
}

public class CollectionSample12_ {

	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("두수를 입력해주세요");
		int su1 = sc.nextInt();
		int su2 = sc.nextInt();
		
//		min = (su1, su2); -> su1 < su2 ? su1 : su2;
		
		
		Calculator minNumber = (k, m) -> k < m ? k: m;
		System.out.println(minNumber.min(su1, su2));
		
		
	}

}

'코딩이야기 > JAVA' 카테고리의 다른 글

[JSP&Servlet]  (0) 2020.05.28
[JAVA]입출력  (0) 2020.05.01
[JAVA] 벡터  (0) 2020.04.29
[JAVA]컬렉션  (0) 2020.04.29
[JAVA]제네릭2  (0) 2020.04.28

+ Recent posts