반응형

StringTokenizer 클래스

- BufferedReader 클래스의 메서드로 입력을 받으면 라인 단위로 읽게 된다. 여기서 스페이스나 콤마 등으로 문자열을 분리할 경우가 많다. 특정 문자를 기준으로 문자열을 나누고 싶을 때, StringTokenizer를 사용한다.

 

즉, 하나의 문자열을 여러 개의 토큰으로 분리하는 클래스라고 보면 된다.

 

 

StringTokenizer 라이브러리 import

import java.util.StringTokenizer;

 

 

StringTokenizer 생성자

StringTokenizer를 생성하는 방식에는 3가지가 있다.

// 띄어쓰기 기준으로 문자열을 나눔.
StringTokenizer st = new StringTokenizer(문자열);

// 구분자를 기준으로 문자열을 나눔.
StringTokenizer st = new StringTokenizer(문자열, 구분자);

// 구분자를 기분으로 문자열을 나눔. 이 때, 구분자도 토큰으로 넣을지 아닐지 구분.(default는 false)
StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);

 

1. 띄어쓰기 기준으로 문자열 나누기

import java.util.StringTokenizer;

public class Q9 {
	public static void main(String[] args) {
		String str = "Welcome to JunFe's blog";
		StringTokenizer st = new StringTokenizer(str);
		
		int count = st.countTokens();
		for (int i = 0; i < count; i++) {
			System.out.println(st.nextToken());
		}
	}
}

 

결과 화면

 

2. 구분자로 구분하기

import java.util.StringTokenizer;

public class Q9 {
	public static void main(String[] args) {
		String str = "Welcome#to#JunFe's#blog";
		StringTokenizer st = new StringTokenizer(str,"#"); // 구분자는 쌍따옴표로 작성.
		
		int count = st.countTokens();
		for (int i = 0; i < count; i++) {
			System.out.println(st.nextToken());
		}
	}
}

결과 화면

결과는 1번과 같다.

 

 

3. 구분자도 토큰화 하기

import java.util.StringTokenizer;

public class Q9 {
	public static void main(String[] args) {
		String str = "Welcome#to#JunFe's#blog";
		StringTokenizer st = new StringTokenizer(str,"#",true); // 구분자는 쌍따옴표로 작성.
		
		int count = st.countTokens();
		for (int i = 0; i < count; i++) {
			System.out.println(st.nextToken());
		}
	}
}

 

결과 화면

구분자 또한 토큰화되어 출력된 것을 확인할 수 있다.

 

 

그렇다면 StringTokenizer와 Split의 차이는 무엇일까

둘 다 문자열을 파싱하는데 사용한다는 공통점이 있다.

 

차이점

- StringTokenizer는 java.util에 포함된 클래스, split은 String클래스에 속해있는 메소드

- StringTokenizer는 문자나 문자열로 문자열을 구분, split은 정규표현식으로 구분

- StringTokenizer는 빈 문자열을 토큰으로 인식하지 않음, split은 빈 문자열을 토큰으로 인식

- StringTokenizer는 결과값이 문자열이라 전체 토큰을 보고싶으면 반복문을 이용해서 하나씩 뽑아야함, split은 결과값이 문자열 배열.

반응형

'Programming > Java' 카테고리의 다른 글

[Java] 거듭 제곱 구하는 방법 Math.pow()  (0) 2022.10.31
[Java] printf  (0) 2021.09.11
Java Beans란?  (0) 2021.08.22
DAO와 DTO(VO)의 차이점  (0) 2021.08.19
반응형

printf는 print, println 과 좀 다르다.

기본 형식은 아래와 같다.

 

System.out.printf(format, args);

 

여기서 format에는 %d, %f, %s, %c가 들어가고, arg에는 %*에 들어갈 인자값이 들어간다.

 

그러면 여기서 어떤 차이가 있는지 하나씩 비교해보자.

 

public class Ex{
	public static void main(String[] args){
    	System.out.printf("정수형:%d\n", 7);
        System.out.printf("정수형:%2d\n", 7);
        System.out.printf("정수형:%02d\n", 7);
        
        System.out.printf("실수형:%f\n", 7.5555);
        System.out.printf("실수형:%.3f\n", 7.4444);
        System.out.printf("실수형:%.2f\n", 7.5555);
        
        System.out.printf("실수형:%9f\n", 7.5555);
        System.out.printf("실수형:%010f\n", 7.5555);
        System.out.printf("실수형:%10.2f\n", 7.5555);
        System.out.printf("실수형:%010.2f\n", 7.5555);
        
        System.out.printf("문자형:%c\n", 'K');
        System.out.printf("문자열형:%s\n", "study hard");
    }
}

 

그에 대한 결과값

 

그럼 하나씩 살펴보자.

 

정수형

정수 10진수는 %d를 사용하여 표현한다.

%d는 알겠는데 %2d, %02d는 무엇일까?

 

먼저 %2d의 의미는 2자리 정수형을 표현하라는 의미이다. 입력한 숫자는 7로 한자리이므로 앞에 빈공간이 하나 생기고 ' 7'이 출력된다.

다음으로 %02d의 의미는 2자리 정수형을 표현하되, 빈자리는 0으로 채우라는 의미이다. 따라서 '07'이 출력된다.

 

실수형

실수형도 정수형과 크게 차이는 없다. 실수형 인자를 입력할 때는 %f를 사용한다.

%f 는 작성해본 결과 소수점 6자리까지 표현된다. 7.555500 이 출력된다.

%.3f 는 소수점 3자리까지 표현되고 소수점 4번째 자리에서 반올림해서 7.444 가 출력된다.

%.2f 는 소수점 3번째 자리에서 반올림하여 소수점 2번째자리까지 표현하여 7.56 이 출력된다.

 

%9f 는 총 9자리수를 표현하겠다는 뜻으로, %f가 기본 소수점 6자리를 표현하기 때문에 수수점 6자릴 제외한 ' 7.'이 앞에 세자리로 표현된다. 이 때, 소수점인 '.'도 한자리로 친다. 따라서 ' 7.555500' 으로 출력된다.

%010f 는 총 10자리수를 표현하고, 기본 소수점 6자리를 제외한 나머지 4자리를 빈곳은 0으로 채워 '007.'으로 표시하여 '007.555500'으로 출력된다.

%10.2f 는 총 10자리수를 표현하고, 소수점 3번째자리에서 반올림해 소수점 2자리까지만 표현한다. 따라서 '      7.56' 이 출력된다.

%010.2f 는 총 10자리수를 표현하고, 위와 같이 소수점은 2자리까지만 표현하는데, 앞 빈공간을 0으로 채워 '0000007.56'이 출력된다.

 

문자형

%c는 인자값은 ''(작은따옴표)를 이용해서 표현하고, 한 문자를 표현할 때 사용한다. 결과값은 'K'

 

문자열형

%s는 인자값은 ""(큰따옴표)를 이용해서 표현하고, 문자열을 표현할 때 사용한다. 결과값은 "study hard"

 

 

스스로에게 공부 열심히 화이팅하자는 의미로 문자열은 적었다. 

 

반응형

'Programming > Java' 카테고리의 다른 글

[Java] 거듭 제곱 구하는 방법 Math.pow()  (0) 2022.10.31
[Java] StringTokenizer 클래스  (0) 2021.09.25
Java Beans란?  (0) 2021.08.22
DAO와 DTO(VO)의 차이점  (0) 2021.08.19
반응형

'의존성 주입' 이라는 개념.

 

'의존성'이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미.

 

'주입'은 말 그대로 외부에서 밀어 넣는 것을 의미.

 

즉, 두 단어를 결합해서 본다면 '어떤 객체가 필요한 객체를 외부에서 밀어 넣는다'는 의미.

 

그렇다면 왜?? 외부에서 객체를 주입하는 방식을 사용하는가?

 

음식점을 예로 들어보면 쉽게 이해할 수 있다.

 

1. 식재료를 직접 구매하여 음식점을 운영한다.

- 식재료 구매도 신경쓰고, 음식점 운영도 신경 써야 한다.

 

2. 외부에서 식재료를 공급해주고 그걸 이용해서 음식점을 운영한다.

- 식재료 수급이 편이하고, 장사에만 집중할 수 있다.

 

2번 처럼 외부에서 주입 받는경우 개발에만 집중할 수 있게 되는 것이다.

 

스프링은 이러한 구조를 만들기 적합한 구조로 설계되어 있다. 스프링에서는 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해주는 구조이다. 따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는 작업을 하는 형태의 개발을 한다. ApplicationContext가 관리하는 객체들을 빈(Bean) 이라고 부르고, 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 오노테이션 설정, Java 설정 방식을 이용할 수 있음.

반응형
반응형

POJO(Plain Old Java Object)

- 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. [1]

우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아 글쎄, 다들 좋아하더라고.
  — 마틴 파울러

POJO라는 용어는 이후에 주로 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용되었다. 스프링 프레임워크는 POJO 방식의 프레임워크이다.

 

 

스프링은 내부에서 객체 간의 관계를 구성.

이 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO의 구성만으로 가능하도록 제작.

-> 일반적인 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다는 이야기

 

의미?

- 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너 기술에 종속적이지 않다.

- 개발자는 가장 일번적인 형태로 코드를 작서앟고 실행할 수 있기 때문에 생산성에서도 유리

- 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있음.

 

반응형
반응형

- JavaBeans

 

 => JavaBeans란 자바로 작성된 소프트웨어 컴포넌트를 지칭하는 단어로 이 컴포넌트를 빈(Bean)이라고 부르며 썬사의 JavaBeans API에 정의된 스펙에 따라 만든다.

 => JavaBeans는 자바 관련 소프트웨어 개발에 있어 재사용이 가능한 표준 컴포넌트 모델이다.

 

 

- Beans

 

  => java 클래스들을 모아놓은 package 

  => Model, View, Controller(MVC패턴 구현)

     Model - 저장소역할( setXxx(), getXxx() 구현) - java코딩 

     View - GUI역할(클라이언트에게 보여줄 화면구성 구현 ) - jsp코딩

     Controller - DAO(데이터처리 담당 -DB연동)역할 , 비즈니스 로직

                     내부적으로 보이지 않게 처리해야하는 기능 구현 -java코딩, 서블릿문서

 

 => Beans를 이용하여 MVC패턴으로 구현함으로써 재사용성과 유지보수 용이

 => 이러한 MVC패턴을 기반으로 나오는 다양한 프레임웍이 있음.

 

===========================================================================================================================

 

*빈즈 규약

 

  [1] 기본 생성자가 반드시 존재해야한다. (인자가없는 디폴트 생성자)

  [2] 속성을 접급한고 꺼내올수있는 setXXX/getXXX메소드를 구성한다.

  [3] 속성을 지정(private)해야하는데 속성 이름은 보통 html의 form태그안에서 input 태그의 name속성 값과 같게 정한다.

 

*빈즈의 종류

 

  [1] 비쥬얼 컴포넌트 :  ex) JButton, JTextField......

  [2] 데이터빈즈 : 데이터를 담아두는 객체를 만드는 클래스 ex) StudentDTO, StudentVO.....등

  [3] 서비스빈즈 : 연산이나 서비스 기능 Beans즉, worker빈즈 ex) StudentDAO....등

 

*빈즈의 유효범위

  [1] page : 하나의 jsp페이지 내에서만 유효

  [2] request : 하나의 요청에 대한 처리관련 jsp페이지들에 유효, 포워딩 되거나 인클루드된 페이지에서 이 빈을 사용가능

  [3] session: 빈은 서버 파트의 기억 공간인 session객체에 저장됨, 하나의 사용자(브라우저)에대한 유효

       ** 유효시간 : 특정사용자가 웹브라우저를 닫을때까지 , 특정 설정이 없으면 30분동안 요청이 없을때까지(conf/web.xml에서 세션시간(Session time out)을 조정할수있다.)

 

  [4] application : JSP 애플리케이션과 생명주기를 같이함, 

                          서버가 종료되기전까지 메모리에 상주, 

                          웹 애플리케이션이 undeploy되기전까지 메모리에 상주

 

웹 애플리케이션 deploy -> 생성

웹 애플리케이션 undeploy -> 제거

 

  cf)크기

       page < request < session < application

===========================================================================================================================

 

 

 -Beans만들기

 

  1. Model의 역할 저장소(java문서)

 

   package gaon.bean;

   public class LoginBean{

 

     private Strig id;

     private int pwd;

 

      //전역변수 id, pwd에대한 setXxx()메소드와 getXxx()메소드 작성

     public void setId(String id){

this.id = id;

     }

     public String getId(){

return id;

    }

 

    public void setPwd(int pwd){

this.pwd = pwd;

   }

   public int getPwd(){

return pwd;

   }

}//end

 

 

  2. jsp영역에서 Beans사용법

 

    - beans 사용 선언

    <jsp:useBean id="별칭" class="사용할클래스이름" scope="beans의범위" />

        

      * id="bean" => bean이라는 이름으로 클래스에 있는 메소드 접근

      * class="gaon.bean.LoginBean"  => bean 이름으로 사용한 클래스선언

 

      * scope ="request | session | application | page"

             request => 사용자요청이 들어오는 순간에만 bean사용함.

             sssion => 클라이언트의 세션이 살았는동안 bean사용함.

             application => 서버시작 ~ 종료될때가지 bean사용함.

             page => 현재 페이지내에서만 사용함(기본값)

 

 

  - 선언된 Bean에 저장하기 ( Bean data를 저장 )

 

  <jsp:setProperty name="bean" property="id" /> 

     => bean 클래스에 있는 setId()호출됨

  <jsp:setProperty name="bean" property="*" /> 

     =>bean 클래스에있는  set으로 시작하는 모든메소드 호출됨

 

 

  -선언된 Bean의 데이터 가져오기

    <jsp:getProperty name="bean" property="id" /> 

      => bean클래스에 있는 getId()호출됨.

 

 

  

반응형

'Programming > Java' 카테고리의 다른 글

[Java] 거듭 제곱 구하는 방법 Math.pow()  (0) 2022.10.31
[Java] StringTokenizer 클래스  (0) 2021.09.25
[Java] printf  (0) 2021.09.11
DAO와 DTO(VO)의 차이점  (0) 2021.08.19
반응형

DAO(Data Access Object)

- 데이터베이스의 data에 접근하기 위한 객체이며 데이터베이스 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.

DAO는 데이터베이스와 연결할 Connection까지 설정되어 있는 경우가 많다. 그래서 현재 쓰이는 MyBatis 등을 사용할 경우 커넥션풀까지 제공되고 있기 때문에 DAO를 별도로 만드는 경우는 드물다.

 

DTO(Data Transfer Object)

- VO라고도 표현하며 계층 간 데이터 교환을 위한 자바 빈즈(Java Beans)이다.

데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체를 말한다. DTO는 보통 로직을 가지고 있지 않고 data와 그 data에 접근을 위한 getter, setter만 가지고 있다. 정리하면 DTO는 Database에서 Data를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.

반응형

'Programming > Java' 카테고리의 다른 글

[Java] 거듭 제곱 구하는 방법 Math.pow()  (0) 2022.10.31
[Java] StringTokenizer 클래스  (0) 2021.09.25
[Java] printf  (0) 2021.09.11
Java Beans란?  (0) 2021.08.22

+ Recent posts