반응형

코딩테스트 문제를 풀다가 거듭 제곱을 구하는 쉬운 방법이 있나해서 찾아본 후 이 글에 정리하게 되었습니다. java.lang.Math 클래스의 pow() 메소드를 이용하면 쉽게 구할 수 있습니다. Math 클래스가 제공하는 메소드는 모두 정적이라 Import나 Math 클래스 선언 없이 바로 사용할 수 있습니다.

사용법은 다음과 같습니다.

public class Pow {
	public static void main(String[] args) {
    	
        double result = Math.pow(10, 3); // 10의 세제곱
        System.out.println("10의 세제곱은 : " + result);
    }
}

// Math.pow() 메소드의 입력값과 출력값은 모두 double형이며 Math.pow(대상숫자, 지수) 형태로 입력해주면 됩니다.

알고 있으면 유용할 듯 하여 참고하시면 됩니다.

반응형

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

[Java] StringTokenizer 클래스  (0) 2021.09.25
[Java] printf  (0) 2021.09.11
Java Beans란?  (0) 2021.08.22
DAO와 DTO(VO)의 차이점  (0) 2021.08.19
반응형

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
반응형

- 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