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


실행 쉘스크립트는 nohup가 백그라운드 동작을 이용하여 자바가 실행 될 수 있도록 되어 있다.


또한, 실행된 프로세스에 대한 pid를 pid.file에 내용을 저장하도록 한다.


start.sh

nohup [자바 실행 내용] 1> /dev/null 2>&1 &

echo $! > pid.file



종료 쉘스크립트는 실행 쉘스크립트에서 저장한 pid를 찾아 프로세스를 종료 시키도록 되어 있다.


또한, 프로세스가 종료 명령어 사용 후, pid.file 내용은 초기화 하도록 한다.

stop.sh

filename=pid.file

pid=`cat $filename`

kill $pid

cp /dev/null filename


'Linux' 카테고리의 다른 글

[Linux] Top을 이용한 프로세스 스레드 모니터링  (1) 2016.05.30
[Shell] 메뉴 프로그래밍  (0) 2016.05.20


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


예를 들어,


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);


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



MariaDB jdbc

 - MySQL 개발자가 만든 MariaDB다 보니 MySql jdbc파일을 이용하여 무관하였으나,

 - 현재 MariaDB 용 jdbc 파일을 홈페이지에서 다운 받을 수 있으니, 해당 파일을 활용.

 - 홈페이지 주소 : https://downloads.mariadb.org/client-java/



Maria DB  Driver Class

 - 이전에 mysql jdbc 파일을 사용하였을 경우, com.mysql.jdbc.Driver를 입력하여 사용하였으나,

 - 현재 MariaDB jdbc 파일을 사용할 경우, org.mariadb.jdbc.Driver를 입력하여 사용하여야 한다.


MariaDB Connection

 - MySQL jdbc 사용 시, jdbc:mysql://<host>:<port>/<database>

 - MaraiDB jdbc 사용 시, jdbc:mariadb://<host>:<port>/<database>



사용 예시

Class.forName("org.mariadb.jdbc.Driver");

Connection c = DriverManager.getConnection("jdbc:mariadb://localhost:3306/database","root","root");

PreparedStatement ps = c.prepareStatement("select * from table");

ResultSet rs = ps.executeQuery();

rs.close();

ps.close();

c.close();



자바 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 부터 사용 가능. 



먼저 구현하려는 로직은 아래와 같다.


ArrayList의 특정부분 부터 ArrayList의 마지막 부분까지 제거하려는 로직이였다.


for ( int i = k ; i < arrayList.size() ; i ++){

arrayList.remove(i);

}


이렇게 작성하였고, 에러는 발생하지 않는다.


문제는, 이와 같이 실행할 경우, ArrayList의 마지막 부분이 삭제되지 않게 된다.


이와 같은 문제점이 발생하게되는 원인은 


1. remove함수에 대한 이해 부족

2. for문의 동작 방식에 대한 이해 부족


2가지가 원인이 되겠다.


먼저, remove()는 해당 인덱스의 엘리먼트를 지워주는 함수로만 생각하였는데, 그 이후에 동작이 하나 더 있었다.


remove()이후에, 해당 인덱스 이후에 엘리먼트가 존재할 경우 인덱스값을 재계산한다는 것이다.


그리고, for문 동작 방식에 대한 이해는 remove와 연관시켜 생각해야되는데,


remove이후에 인덱스값이 재계산된 상태에서 


for의 동작방식에 따라 제일 마지막에 호출하게되는 부분이 size()함수이다.


그러므로 remove로 엘리먼트를 제거하고, 재계산된 size가 호출이되어 마지막 부분이 삭제가 되지 않는다.


이에 대한 해결 방법으로는 간단하게


removeRange()를 사용하거나,


size()함수의 값을 변수에 저장하여 값이 동적으로 변하지 않게 하면된다.



int end = arrayList.size();


for( int i = k; i < end ; i++){

arrayList.remove(i);

}





초기화 블럭
 - 클래스 초기화 블럭, 인스턴스 초기화 블럭으로 나뉘며, 각각의 변수의 초기화에 사용된다.

※ 클래스 초기화 블럭 - 클래스변수를 초기화할때 사용한다.
※ 인스턴스 초기화 블럭 - 인스턴스 변수를 초기화할때 사용한다.

생성자보다 인스턴스 초기화 블럭이 먼저 수행됨.


인스턴스 초기화 블럭 - {}를 사용하여 인스턴스 변수를 초기화 한다.
  ex) {  초기화 내용  }

클래스 초기화 블럭 - static{} 를 사용하여 클래스 변수를 초기화 한다.
  ex) static { 초기화 내용 }

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

[Java] Sub Class의 필요성  (0) 2012.10.03
[Java] 천단위 콤마 추가, 제거  (0) 2012.07.26
[Eclipse] 이클립스 플러그인 제거  (0) 2011.09.22
URI vs URL  (0) 2011.09.05
[Java] Scanner  (0) 2011.06.05


Scanner를 이용한 간단한 입력 예제


import java.util.Scanner;

public class {

public static void main(String args[]){
Scanner scan = new Scanner(System.in);

String str = scan.nextLine();
int i = scan.nextInt();
Long l = scan.nextLong();


}
}

위와 같이 입력을 받을때 선언된 기본형과 같은 next를 선언하여 사용해야된다.

단, String의 경우 nextLine() 또는 next()를 사용한다.

또한 byte, short, int, long, float, double의 경우 nextOO(int radix)를 호출할때 매개변수로

진수를 지정하여 입력받을 수 있다.

 



인스턴스 변


● 클래스 내에서 선언됩니다. 메소드 내에서 선언되는 것이 아닙니다.


class horse{

             private double height = 15.2;

             private String breed;

             //나머지 코드...

}
 



지역변수



● 지역변수(local variable)는 메소드 내에서 선언됩니다.

class AddThing{

               int a;

               int b = 12;

      

               public int add() {

                      int total = a + b;

                      return total;

               }



 

● 단, 지역변수는 사용하기 전에 반드시 초기화해야 합니다.

class Foo{

    public void go() {

            int x;

            int z = x + 3; //초기화 하지 않았으므로 컴파일이 되지 않습니다.

     }

}
 

지역변수에는 기본값이 없습니다. 따라서 지역 변수를 초기화하기 전에 사용하려고 하면 컴파일 과정에서 오류가 납니다.