Java의 Integer 클래스를 사용하여 진수 변환

 

Integer.toBinaryString(int value)  

- 10진수의 값(value)을 2진수로 변경

Integer.toOctalString(int value)

- 10진수의 값(value)을 8진수로 변경

Integer.toHexString(int value)

- 10진수의 값(value)을 16진수로 변경

Integer.parseInt(String s, int radix)

- 입력된 문자열 값(s)을 입력된 진수값(radix)에 맞게 변경

 

public void numberConvert(){
		
      //10진수 -> 2진수로 변환
      for( int i = 0 ; i < 20 ; i++ ){
            System.out.print(Integer.toBinaryString(i) + "\t");
      }
      System.out.println();
      
      //10진수 -> 8진수로 변환
      for ( int i = 0 ; i < 20 ; i++){
            System.out.print(Integer.toOctalString(i) + "\t");
      }
      System.out.println();
      
      //10진수 -> 16진수로 변환
      for ( int i = 0 ; i < 20 ; i++ ){
            System.out.print(Integer.toHexString(i) + "\t");
      }
      System.out.println();
      
      //2진수 -> 10진수로 변환
      System.out.println(Integer.parseInt("01",2));
      
      //8진수 -> 10진수로 변환
      System.out.println(Integer.parseInt("14",8));
      
      //16진수 -> 10진수로 변환
      System.out.println(Integer.parseInt("A",16));
}
//	0	1	10	11	100	101	110	111	1000	1001	1010	1011	1100	1101	1110	1111	10000	10001	10010	10011	
//	0	1	2	3	4	5	6	7	10	11	12	13	14	15	16	17	20	21	22	23	
//	0	1	2	3	4	5	6	7	8	9	a	b	c	d	e	f	10	11	12	13	
//	1
//	12
//	10

Java 8 이상부터는 데이터 포맷 형식에서 연도를 표기하는 yyyy외에도 uuuu가 추가되어있다.

 

먼저 예시 코드와 출력물은 아래와 같다.

 

    private void checkYear(){
		LocalDateTime localDateTime = LocalDateTime.of(0, 12, 30, 0, 0);
		System.out.println("기원전에서 서기 날짜 출력");
		for ( int i = 0 ; i < 5 ; i++ ){
			String yyResult = localDateTime.format(DateTimeFormatter.ofPattern("G yyyy-MM-dd"));
			String uuResult = localDateTime.format(DateTimeFormatter.ofPattern("G uuuu-MM-dd"));
			System.out.println(yyResult + "\t" + uuResult);
			localDateTime = localDateTime.plusDays(1);
		}
		System.out.println("\n기원전, 서기 각각 100년에 대한 포맷 출력");
		LocalDateTime localDateTime2 = LocalDateTime.of(-100, 12, 30, 0, 0);
		LocalDateTime localDateTime3 = LocalDateTime.of(100, 12, 30, 0, 0);
		String yyResult2 = localDateTime2.format(DateTimeFormatter.ofPattern("G yyyy-MM-dd"));
		String uuResult2 = localDateTime2.format(DateTimeFormatter.ofPattern("G uuuu-MM-dd"));
		System.out.println(yyResult2 + "\t" + uuResult2);
		
		String yyResult3 = localDateTime3.format(DateTimeFormatter.ofPattern("G yyyy-MM-dd"));
		String uuResult3 = localDateTime3.format(DateTimeFormatter.ofPattern("G uuuu-MM-dd"));
		System.out.println(yyResult3 + "\t" + uuResult3);
	}
//	기원전에서 서기 날짜 출력
//	기원전 0001-12-30	기원전 0000-12-30
//	기원전 0001-12-31	기원전 0000-12-31
//	서기 0001-01-01	서기 0001-01-01
//	서기 0001-01-02	서기 0001-01-02
//	서기 0001-01-03	서기 0001-01-03
//
//	기원전, 서기 각각 100년에 대한 포맷 출력
//	기원전 0101-12-30	기원전 -0100-12-30
//	서기 0100-12-30	서기 0100-12-30

 

첫 번째 출력 결과로 확인할 수 있는 내용으로는 yyyy의 표기인 경우, 서기 1년 1월 1일 전일 은 기원전 0년 12월 31일이 아니라, 기원전 1년 12월 31일이 된다.

 

두 번째 출력 결과로 확인할 수 있는 내용으로는 기원전 100년을 표기하고 싶었지만, yyyy에서는 음수 처리와 함께 101년으로 변경되었다.

 

실제로 연도를 가지고 계산을 하거나 표기를 할 때는 uuuu 패턴을 사용하는 것이 안전할 수 있다고 볼 수 있다.

메뉴코드 상위메뉴코드 메뉴명
1 0 MainPage
2 1 Second Menu 1
4 2 Third Menu 1
5 2 Third Menu 2
3 1 Second Menu 2


상단의 테이블 정보를 트리형식으로 표현하게 되면 아래와 같은 구조를 가지고 있음을 알 수 있다.

  • MainPage
    • Second Menu1
      • Third Menu 1
      • Third Menu 2
    • Second Menu2

 

최상위 메뉴인 MainPage를 기준으로 하위 페이지 내용들을 출력하기 위하여

1. HashMap을 사용하여 메뉴코드가 중복되지 않는 점을 이용

2. Parent-Child 관계를 확인 후, ChildrenList에 페이지 정보를 추가

3. 메뉴 정보 출력

위 순서대로 구성되어 있다.

 

public class MenuVO {

	private int menuSeq;
	private int menuUpSeq;
	private String menuNm;
	private int menuSno;
	
	private List<MenuVO> childrenList;

	
	public MenuVO(){
		super();
	}
	
	public MenuVO(MenuVO menuVO){
		this.menuSeq = menuVO.getMenuSeq();
		this.menuUpSeq = menuVO.getMenuUpSeq();
		this.menuNm = menuVO.getMenuNm();
		this.childrenList = new ArrayList<MenuVO>(); 
	}
	
	public int getMenuSeq() {
		return menuSeq;
	}

	public void setMenuSeq(int menuSeq) {
		this.menuSeq = menuSeq;
	}

	public int getMenuUpSeq() {
		return menuUpSeq;
	}

	public void setMenuUpSeq(int menuUpSeq) {
		this.menuUpSeq = menuUpSeq;
	}

	public String getMenuNm() {
		return menuNm;
	}

	public void setMenuNm(String menuNm) {
		this.menuNm = menuNm;
	}

	public int getMenuSno() {
		return menuSno;
	}

	public void setMenuSno(int menuSno) {
		this.menuSno = menuSno;
	}

	public List<MenuVO> getChildrenList() {
		return childrenList;
	}

	public void setChildrenList(List<MenuVO> childrenList) {
		this.childrenList = childrenList;
	}
	
	public void addChildren(MenuVO children){
		this.childrenList.add(children);
	}

	@Override
	public String toString() {
		return "MenuVO [menuSeq=" + menuSeq + ", menuUpSeq=" + menuUpSeq + ", menuNm=" + menuNm + ", menuSno=" + menuSno
				+ ", childrenList=" + childrenList + "]";
	}
}

 

 

public static void main(String[] args) {
	
	List<MenuVO> menuList = new ArrayList<MenuVO>();
	
	MenuVO topMenu = new MenuVO();
	topMenu.setMenuSeq(1);
	topMenu.setMenuUpSeq(0);
	topMenu.setMenuNm("Main Page");
	menuList.add(topMenu);

	MenuVO secondMenu1 = new MenuVO();
	secondMenu1.setMenuSeq(2);
	secondMenu1.setMenuUpSeq(1);
	secondMenu1.setMenuNm("secondMenu1 Page");
	menuList.add(secondMenu1);
	
	MenuVO thirdMenu1 = new MenuVO();
	thirdMenu1.setMenuSeq(4);
	thirdMenu1.setMenuUpSeq(2);
	thirdMenu1.setMenuNm("thirdMenu1 Page");
	menuList.add(thirdMenu1);

	MenuVO thirdMenu2 = new MenuVO();
	thirdMenu2.setMenuSeq(5);
	thirdMenu2.setMenuUpSeq(2);
	thirdMenu2.setMenuNm("thirdMenu2 Page");
	menuList.add(thirdMenu2);
	
	MenuVO secondMenu2 = new MenuVO();
	secondMenu2.setMenuSeq(3);
	secondMenu2.setMenuUpSeq(1);
	secondMenu2.setMenuNm("secondMenu2 Page");
	menuList.add(secondMenu2);
	
	
	
	
	HashMap<Integer, MenuVO> hm = new HashMap<Integer, MenuVO>();
	
	
    for(MenuVO p:menuList){
    	MenuVO mmdChild ;
        if(hm.containsKey(p.getMenuSeq())){
            mmdChild = hm.get(p.getMenuSeq());
        }
        else{
            mmdChild = new MenuVO(p);
            hm.put(p.getMenuSeq(),mmdChild);
        }           

        MenuVO mmdParent ;
        if(hm.containsKey(p.getMenuUpSeq())){
            mmdParent = hm.get(p.getMenuUpSeq());
        }
        else{
            mmdParent = new MenuVO(p);
            hm.put(p.getMenuUpSeq(),mmdParent);
        }
        mmdParent.setMenuSeq(p.getMenuUpSeq());
        mmdParent.addChildren(mmdChild);
        
        printHashMap(hm);
    }
  
    MenuVO menuVO = hm.get(1);
    printMenu(menuVO);
    	
}


public static void printMenu(MenuVO menuVO){
	
	System.out.println("#####         START          #####");
	System.out.println(menuVO.getMenuSeq() + " : " + menuVO.getMenuUpSeq() + " : " + menuVO.getMenuNm());
	
	List<MenuVO> tmp = menuVO.getChildrenList();
	
	if ( !tmp.isEmpty() ){
		for (MenuVO childeMenuVO : tmp) {
			printMenu(childeMenuVO);
		}
	}
	 System.out.println("@@@@@          END           @@@@@\n");
}

public static void printHashMap(HashMap<Integer, MenuVO> hm){
	Set<Integer> keySet = hm.keySet();
    System.out.println("$$$$$         START          $$$$$");
    for (Integer integer : keySet) {
		MenuVO menuVO = hm.get(integer);
		System.out.println(menuVO.toString());
	}
    System.out.println("$$$$$          END           $$$$$\n");
}

/*
결과
$$$$$         START          $$$$$
MenuVO [menuSeq=0, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[]]]]
MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[]]
$$$$$          END           $$$$$

$$$$$         START          $$$$$
MenuVO [menuSeq=0, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[]]]]]]
MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[]]]]
MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[]]
$$$$$          END           $$$$$

$$$$$         START          $$$$$
MenuVO [menuSeq=0, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]]]]]]]]
MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]]]]]]
MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]]]]
MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]]
$$$$$          END           $$$$$

$$$$$         START          $$$$$
MenuVO [menuSeq=0, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]], MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]]]]]]]
MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]], MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]]]]]
MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]], MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]]]
MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]]
MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]
$$$$$          END           $$$$$

$$$$$         START          $$$$$
MenuVO [menuSeq=0, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]], MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]]], MenuVO [menuSeq=3, menuUpSeq=1, menuNm=secondMenu2 Page, menuSno=0, childrenList=[]]]]]]
MenuVO [menuSeq=1, menuUpSeq=0, menuNm=Main Page, menuSno=0, childrenList=[MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]], MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]]], MenuVO [menuSeq=3, menuUpSeq=1, menuNm=secondMenu2 Page, menuSno=0, childrenList=[]]]]
MenuVO [menuSeq=2, menuUpSeq=1, menuNm=secondMenu1 Page, menuSno=0, childrenList=[MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]], MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]]]
MenuVO [menuSeq=3, menuUpSeq=1, menuNm=secondMenu2 Page, menuSno=0, childrenList=[]]
MenuVO [menuSeq=4, menuUpSeq=2, menuNm=thirdMenu1 Page, menuSno=0, childrenList=[]]
MenuVO [menuSeq=5, menuUpSeq=2, menuNm=thirdMenu2 Page, menuSno=0, childrenList=[]]
$$$$$          END           $$$$$

#####         START          #####
1 : 0 : Main Page
#####         START          #####
2 : 1 : secondMenu1 Page
#####         START          #####
4 : 2 : thirdMenu1 Page
@@@@@          END           @@@@@

#####         START          #####
5 : 2 : thirdMenu2 Page
@@@@@          END           @@@@@

@@@@@          END           @@@@@

#####         START          #####
3 : 1 : secondMenu2 Page
@@@@@          END           @@@@@

@@@@@          END           @@@@@
*/

 

 

 

public String maskingPhone(String phoneStr) {
	phoneStr = phoneStr.replaceAll("-", "");
	String result = "";
	int strLength = phoneStr.length();
	result += phoneStr.substring(0,3);
	result += strLength == 10 ? "-***-" : "-****-";
	result += phoneStr.substring((strLength - 4 ),(strLength));
	return result;
}
//maskingPhone("010-111-1111");
//maskingPhone("010-1234-5678");

 

 

public String maskingName(String nameStr) {
	String result = "";
	int strLength = nameStr.length();
	
	result += nameStr.substring(0,1);
	
	if ( strLength == 2 ){
		result += "*";
	}else{
		String mask = "";
		for (int i = 0; i < ( strLength -2 ); i++) {
			mask += "*";
		}
		result += mask;
		result += nameStr.subSequence((strLength-1), strLength);
	}
	return result;
}
//maskingName("김김");
//maskingName("박박박");


현재 코드라인에서 지금까지 호출된 함수의 정보를 확인하기 위한 방법이다.


예를 들어,


Class A{


public static void main(String args...){

new B();

}

}


Class B{


public B(){

// 현재 라인에서 현재까지 호출된 정보를 확인하고 싶은 경우 사용

}


}




StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();


를 이용하면 현재 호출까지 되었던 정보들을 스택 구조로 획득할 수 있다.


StackTraceElement에서 획득할 수 있는 대표적인 정보로는


for (StackTraceElement stackTraceElement : stackTrace) {
    stackTraceElement.getClassName();
    stackTraceElement.getFileName();
    stackTraceElement.getLineNumber();
    stackTraceElement.getMethodName();

}


대부분 함수이름만으로 어떠한 정보를 획득할 수 있는지 이해할 수 있다.


다만, getClassName()의 경우 fully qualified name of the Class가 리턴 된다.

(예시 : com.test 패키지 아래에 Temp.java 파일의 경우, com.test.Temp 라는 정보가 리턴된다.)







이클립스 사용 시, System.out을 사용하면 이클립스 콘솔 창에 결과가 출력이 된다.


하지만 필요에 따라, 콘솔이 아닌 파일로 출력해야 되는 경우에 간단한 방법으로 콘솔에서 파일로 출력 할 수 있다.



File file = new File("output.txt");
FileOutputStream fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);


위와 같은 방법을 사용하면, 해당 코드 이후로 System.out을 사용한 출력 결과는 output.txt 파일에 저장이 된다.



만약 파일에서 다시 콘솔로 출력해야된다면,


PrintStream console = System.out;
System.setOut(console);


위와 같이 사용하여, 파일에서 콘솔 출력으로 변경 할 수 있다.

Hikari Connection Pool 사용하기


Hikari Download




HikariCP Class 구현


public class HikariConnectionPool {
    private static HikariConnectionPool instance = null;
    private HikariDataSource ds;

    public HikariConnectionPool() {
        HikariConfig config = new HikariConfig();
        config.setDriverClassName("DRIVERCLASS");
        config.setJdbcUrl("JDBCURL");
        config.setUsername("USER");
        config.setPassword("PASSWORD");
        ds = new HikariDataSource(config);
    }

    public Connection getConnect(){
        Connection connection = null;
        try {
            connection = ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static HikariConnectionPool getInstance(){
        if ( instance == null ){
            instance = new HikariConnectionPool();
        }
        return instance;
    }
}


HikariCP Driver Class Name은

https://github.com/brettwooldridge/HikariCP#popular-datasource-class-names

참조하여 사용.



자바 5에서 추가된 기능인 가변인자.


메소드의 인자값을 넣을때, 인수값의 개수가 일정하지 않을때 사용할 수 있는 기능.


-사용법


public void print(String... strings)


위와 같이 선언시에 ...을 넣으므로써 일정하지 않은 인수값을 모두 수용할 수 있게 된다.



-예시


public static void main( String[] args ){

     varargs("aa", "bb", "cc", "dd");


     varargs("11", "22");

}

public static void varargs(String... strings){

for( String str : strings){

System.out.println(str);

}

}



※ 유의점 : 자바 5 부터 사용 가능. 



객체지향적인 프로그래밍에서는 상속이 매우 중요한 개념이다.


상속은 기본적으로 자식이 부모 클래스를 상속한다는 개념으로, 


부모클래스(Super Class)의 메소드와 인스턴스 변수를 자식클래스(Sub Class)가 모두 사용할 수 있다.


그러나, 자식클래스가 부모클래스의 메소드나 인스턴스 변수를 지울 수 없다.


인스턴스 변수는 추가만 가능하며,


메소드는 추가 또는 재정의가 가능하다.


그렇기 떄문에, 자식클래스를 사용하기 위한 필요성을 먼저 검토 해봐야 한다.


1. 클래스에 새 메소드나 인스턴스 변수를 추가해 기능을 확장하는 경우


2. 클래스의 특화된 버전을 만드는 경우


3. 하나 이상의 메소드를 재정의해 클래스의 기본 동작을 변경하려는 경우


위와 같이 3가지 경우에 따라 자식클래스로 상속받아 클래스를 확장해야 사용하면 된다.



함수로 구현하여 활용.



//콤마 추가

public String 함수명(String data){

int result= Integer.parseInt(data);

return new java.text.DecimalFormat("#,###").format( result );

}


//콤마 제거

public String 함수명(String data){

return data.replaceAll("\\,","");

}

'프로그래밍 > Java' 카테고리의 다른 글

[Java] 가변인자 ( Varargs )  (0) 2013.03.13
[Java] Sub Class의 필요성  (0) 2012.10.03
[Java] 초기화 블럭 ( initialization block )  (0) 2012.03.02
[Eclipse] 이클립스 플러그인 제거  (0) 2011.09.22
URI vs URL  (0) 2011.09.05