728x90
300x250

[Java(자바)]  barbecue 바코드 생성 라이브러리

이번에 소개할 내용은 barbecue(바베큐) 바코드 생성 라이브러리에 대해서 소개하고자 한다.


1. 적용 라이선스

오픈소스 "BSD License(이하 "비에스디 라이선스")를 적용받는다.

http://barbecue.sourceforge.net 

 


2. 이클립스에서의 셋팅방법

프로젝트 환경설정에서 Liberies에 ClassPath(클래스패스)에 "Add External JARS..."를 클릭해서 등록해서 사용하면 된다.

그림 1. 프로젝트 속성 -> 라이브러리에 클래스패스에 Jar파일 등록하기

그림 2. 프로젝트 속성, Order and Export("읽기: 오더 엔 익스폴트")

jdom("읽기: 제이돔")과 barbecue("읽기: 바베큐")를 체크한다.

Apply("읽기: 어플라이", "뜻: 적용")을 클릭한다.

 


3. 이클립스 - 자바 소스코드

다음처럼 소스코드를 작성하여 적용할 수 있다.

package com.barcode.sample;

import java.io.File;
import net.sourceforge.barbecue.Barcode;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.BarcodeImageHandler;

public class Program {

     public static void main(String[] args) {
          String str = "123412341234";
          try {

               Barcode barcode = BarcodeFactory.createCode128(str);
               File file = new File("c:/barcode1.png");

              BarcodeImageHandler.savePNG(barcode, file);
         } catch (Exception e) {
              e.printStackTrace();
         }
    }

}

4. 바코드 생성 모습

실제 적용되는 바코드의 모습이다. 바코드 입출력 장치(이하 "바코드 스캐너라고도 불림. 글자 입력방식의 장치")로
식별하면 인식된다.

 

그림 3. 바코드 생성 모습의 예

 


5. 라이브러리 첨부(Library)

barbecue-1.5-beta1.zip
0.84MB

BSD License를 적용받는다.

 


6. 첨부(Attachment)

 

Sample_Code_Java.zip
0.00MB

자바에 적용된 코드이다. 많은 도움이 되었으면 한다.

 

210309_Java_Barbecue_Barcode_Create_Guideline.zip
0.91MB

[Apache Licence v2.0을 적용받는다.]


* 맺음글(Conclusion)

자바에서 바코드를 생성하는 방법에 대해서 살펴보았다.


* 참고자료(References)

1. Barbecue project, http://barbecue.sourceforge.net, Accessed by 2021-03-09, Last Modified 2021-03-09.

2. OpenJDK (java.net), http://openjdk.java.net, Accessed by 2021-03-09, Last Modified 2021-03-09.

3. Enabling Open Innovation & Collaboration | The Eclipse Foundation, http://www.eclipse.org, Accessed by 2021-03-09, Last Modified 2021-03-09.

4. JDOM, http://www.jdom.org, Accessed by 2021-03-09, Last Modified 2021-03-09.

반응형
728x90
300x250

[Sun Sys - Java] 태스트도구 JUnit 5 - Eclipse(STS 4.4)에서 사용하는 방법


프로그래밍을 하면서 태스트 작업을 하기 마련인데 자바에서 태스트 환경도구를 사용하는 방법에 대해서 소개하려고 한다.

수업 등에서는 다뤄볼 일이 적은 부분일 수도 있다. 쉬우면서 어려운 부분이 태스트 도구라고 본다.


IDE: Spring-tool-suite-4-4.7.2.RELEASE (2020-09-08 기준 - 최신)

JAR: 

1. org.junit.jupiter.api_5.6.0.v20200203-2009.jar

2. org.junit.jupiter.engine_5.6.0.v20200203-2009.jar

3. org.junit.jupiter.migrationsupport_5.6.0.v20200203-2009.jar

4. org.junit.jupiter.params_5.6.0.v20200203-2009.jar

5. org.junit.platform.commons_1.6.0.v20200203-2009.jar

6. org.junit.platform.engine_1.6.0.v20200203-2009.jar

7. org.junit.platform.lanucher_1.6.0.v20200203-2009.jar

8. org.junit.platform.runner_1.6.0.v20200203-2009.jar

9. org.junit.platform.suite.api_1.6.0.v20200203-2009.jar

10. org.junit.vintage.engine_5.6.0.v20200203-2009.jar

11. org.opentest4j_1.2.0.v20190826-0900.jar

12. org.apiguardian_1.1.0.v20190826-0900.jar

13. org.junit_4.13.0.v20200204-1500.jar

14. org.hamcrest_1.2.0.v20180420-1519.jar


(EPL 라이선스 적용: 오픈소스)


* 공식 사용 메뉴얼: 사이트
https://junit.org/junit5/docs/current/user-guide/

* Assert 관련 API
http://junit.sourceforge.net/javadoc/org/junit/Assert.html




1. 사용 방법 - 영상


아주 간결하게 필요한 부분 위주로 소개하였으니 부담없이 시청해도 된다.



영상 1. Eclipse에서 프로젝트 생성하기 및 JUnit 셋팅하기



영상 2. JUnit 5 - 태스트 케이스 작성 및 동작 시키기




2. 사용 방법(2) - 프로젝트 생성하기


프로젝트를 생성하는 방법을 시작으로 소개하겠다.



그림 1. 프로젝트 생성하기


프로젝트 익스플로러(Project)에서 마우스 오른쪽 버튼을 클릭한다.

New-> Project를 클릭한다.



그림 2. 프로젝트 생성하기


Java Project를 클릭한다.

Next를 클릭한다.



그림 3. 프로젝트 생성하기


Project-name을 입력한 후 Finish를 누른다.



3. Properties - Junit 5 Class Path 등록하기 (Build Path 설정)


제일 중요한 작업이 아닐까 싶다.

이 셋팅을 안 해버리면, 사용할 수 없다. 물론 수동으로 등록하는 방법도 있겠으나 비효율적이다.



그림 4. 프로젝트 클릭 후 마우스 오른쪽 버튼 메뉴 모습


프로젝트를 클릭한다.

마우스 오른쪽 버튼을 클릭한 후, "Properties"를 클릭한다.



그림 5. 프로젝트 속성 - Java Build Path -> ClassPath 클릭 후 과정


Java Build Path를 클릭한다.

Libraries를 클릭한다.

ClassPath를 클릭한다.

Add Library를 클릭한다.



그림 6. Junit5 - 추가하기(1)


JUnit을 선택한다.

Next를 클릭한다.




그림 7. Junit5 - 추가하기(2)


Junit5를 선택한다.

Finish를 누른다.



그림 8. Junit5 - 추가 완료한 모습


다음처럼 등록되면 성공적으로 작업을 완료한 것이다.



4. Class 만들기


실제 태스트를 진행할 예를 하나 만들겠다.



그림 9. Class 만들기(1)


src 폴더를 클릭한 후 마우스 오른쪽 버튼으로 클릭한다.

New->Class를 클릭한다.



그림 10. Class 만들기(2)


Package는 적당히 입력해준다. (예: com.example)

Name을 Calculate라고 입력한다.

Finish를 누른다.



그림 11. Class 만들기(2)


코드를 작성해준다.


public int plus(int a, int b){

     return a + b;

}



5. Junit Test Case - 작성하기 


작성한 클래스를 태스트 케이스를 작성하여 태스트하도록 하겠다.


그림 12. Test Case 생성하기(1)


com.example 패키지를 마우스 오른쪽으로 클릭한다.

New->Other를 클릭한다.




그림 13. Test Case 생성하기(2)


Junit Test Case를 클릭한다.

Next를 누른다.



그림 14. Test Case 생성하기(3)


Class under test의 Browse를 클릭한다.



그림 15. Test Case 생성하기(2)


앞서 만든 "Calculate"를 검색한다.

Calculate를 선택한다.

OK를 누른다.



그림 16. Test Case 생성하기(3)


Package명을 입력한다.

Name을 입력한다.

Next를 누른다.



그림 17. Test Case 생성하기(4)


plus 함수를 선택한다.

Finish를 누른다.



6. Junit Test Case - 태스트 작업 실행하기 


태스트 명세를 완료하였다면, 태스트를 수행하도록 하겠다.



그림 18. Test Case 실행하기(1)


하나 예로 코드를 입력해준다.


@Test

void testPlus(){

      assertEquals(3, new Caculate().plus(2, 3));

}


이 코드는 직감적으로 plus 함수의 결과가 3이 되어야 참인데, 5라는 것을 코드만 보고도 알 수 있다.

외형 코드 말고 세부적인 코드에서 사람이 생각하는 결과를 원하는 게 아니라, 컴퓨터가 3으로 출력하는지 확인하는 것이다.



그림 19. Test Case 실행하기(2)


CalculateTest.java를 마우스 오른쪽 버튼으로 클릭한다.

Run As->JUnit Test를 클릭한다.



그림 20. Test Case 결과 (3)


결과값이 실패했다고 빨강색 진행바와 함수가 올라오는 것을 확인할 수 있다.

코드를 변경해서 시도해보자.


@Test

void testPlus(){

      assertEquals(5, new Caculate().plus(2, 3));

}


직감적으로 5가 되면 맞는 것이다.

진짜 5가 맞는지 확인해보자.


CalculateTest.java를 마우스 오른쪽 버튼으로 클릭한다.

Run as-> JUnit Test를 클릭한다.



그림 21. Test Case 결과 (4)


녹색 불이 들어오면서 이상이 없는 것을 살펴볼 수 있었다.



* JUnit Assert 주요 메서드와 사용 예시


 assert 메서드

설명 

 assertArrayEquals(a, b);

배열 a, b의 일치 여부

assertEquals(a, b);

객체 A와 B가 일치함을 확인.

assertSame(a, b);

 객체 A와 B가 같은 객체임을 확인한다.
assertEquals 메서드는 두 객체의 값이 같은지 검사를 한다.

assertSame메서드는 두 객체가 동일한가

즉, 하나의 객체여부를 확인한다. (== 연산자 역할)

assertTrue(a);

 조건 A가 참인가를 확인한다.

 assertNotNull(a);

객체 A가 null이 아님을 확인한다.

assertFalse(a);

조건 A가 거짓인지를 확인한다.



String empname[] = {"hwani","kimchi"};

String studentname[] = {"hama","sumi"};

assertArrayEquals(empname, studentname);


List someList = someClass.getSomeList();

assertNotNull("조회결과 null", someList);


assertTrue(someList.size() > 0);


int score = 5;

assertFalse( score < 0 ) ;


assertEquals(3, someList.size()); 



반응형
728x90
300x250

[Sun Sys] 자바(Java) - Properties 파일 읽기


자바를 통해서 Properties 파일을 읽는 방법에 대해서 정리하였다.



1. properties 파일


폴더: /src/main/resources


database=localhost

dbuser=helloUser

dbpassword=password


* 파일명: configuration.properties



2. 자바 - 코드


public class GetPropertyValue {


      private String dbpassword;

private String database;

private String dbuser;


      InputStream inputStream;


      public String getPropertyValue() throws Exception{

try{

Properties prop = new Properties();

String propFileName = "configuration.properties";

inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);

if (inputStream != null) {

prop.load(inputStream);

} else {

throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");

}


dbpassword = prop.getProperty("dbpassword");

database = prop.getProperty("database");

dbuser = prop.getProperty("dbuser");

 

} catch(Exception e){

logger.info("Exception : " + e);

} finally {

inputStream.close();

}

return result;

}


}


* 파일명: GetPropertyValue.java

반응형
728x90
300x250
[Sun Sys - Java] 자바 - Jar 파일 실행하기(윈도우, 리눅스)

 

자바 Jar 파일을 윈도우, 리눅스에서 실행하는 방법이다.

 

윈도우: javaw -jar client.jar

리눅스: java -jar client.jar

 

 

반응형
728x90
300x250
[Java]  Swing - JOptionPane - showInputDialog

 

자바에서 스윙을 소개하고자 합니다.

JOptionPane의 showInputDialog()에 대해서 요약을 해봤습니다.

 


1. 요약

 

// 메뉴 생성
 JMenuItem testItem1 = new JMenuItem("단순 메시지 입력 상자");
 JMenuItem testItem2 = new JMenuItem("콤보 메시지 입력 상자" );
 
 
 testItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {      
           JOptionPane.showInputDialog (null, "메시지 박스") ;
      }
 });
 
 testItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
          String[] selections = { "첫번째값", "두번째값", "세번째값" };
         
          // 데이터 입력 받기
          Object test = JOptionPane.showInputDialog( null, "selectionValues \n이용예제", "제목",
                JOptionPane.QUESTION_MESSAGE, null, selections, "두번째값" );
         
          // 출력 결과 찍어보기
          JOptionPane.showMessageDialog( null, test );      
      }
 });

 


2. 참고자료(Reference)

 

1. javase Doc, http://docs.oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html, Accessed by 2015-06-01

 

반응형
728x90
300x250

[Java] API 8.0 사이트

자바 개발자가 반드시 접속하면 도움을 많이 받는 사이트 중 하나가 제작사 홈페이지라고 봅니다.
아래의 사이트는 oracle JavaSE 8버전의 API 사이트 주소입니다.

http://docs.oracle.com/javase/8/docs/api/

반응형
728x90
300x250

[Java] Swing - JTable의 열 헤더 출력(Column Header) - JScrollPane 이용

 

Swing에서 Jtable의 열 헤더 출력에 대해서 소개합니다.
Eclipse의 Designer에서 JTable을 추가하면, 아래처럼 출력됩니다.

 

 

코드는 이처럼 생성됩니다.

contentPane.add ( table, BorderLayout.CENTER ) ;

 

헤더를 추가하기 위해서는

contentPane.add ( JScrollPane ( table ) , BorderLayout.CENTER ) ; 

 

이처럼 바꿔주면 됩니다.

 

반응형
728x90
300x250

[Java] Deep Copy & Shallow Copy

 

1. 개념(Concept)


 

2. 소스 코드

 

class Account implements Cloneable{

        private String accnum;
        private int balance;

 

        public void setNum(String accnum)
        {
             this.accnum = accnum;  
        }

        public String getNum()
       {
            return this.accnum;
       }
 

         
       protected Object clone()
       {

 

               try{
                    Account account = (Account)super.clone();
                    return account;
               }
              catch(CloneNotSupportedException e)
              {
                   e.printStackTrace();
              }
              return null;
       } 

}

 

Source) Account.java

 

public class Program
{

      public static void deepcopy()
     {
              Account source = new Account();
              source.setNum("111");

 
             Account target = (Account)source.clone(); // clone()은 Overliding으로 구현.
  
              System.out.println( "소스원본:" + source.getNum() );
              System.out.println( "대상-깊은 복사:" + target.getNum() );

 

              System.out.println( "원본값 계좌번호 변경 333\n" );


              source.setNum("333");


              System.out.println( "소스원본:" + source.getNum() );
              System.out.println( "대상-깊은 복사:" + target.getNum() + "\n" );
       }


       public static void shallowcopy()
       {
              Account source = new Account();
           source.setNum("111");

 

              Account target = source;
  
              System.out.println( "소스원본:" + source.getNum() );
              System.out.println( "대상-얇은 복사:" + target.getNum() );

 

              System.out.println( "원본값 계좌번호 변경 333\n" );
              source.setNum("333");


              System.out.println( "소스원본:" + source.getNum() );
              System.out.println( "대상-얇은 복사:" + target.getNum() + "\n" );
       }

 

       public static void main(String args[])
       { 
              System.out.println("--- 1.깊은 복사------------------");
           deepcopy();

 

              System.out.println("--- 2.얇은 복사------------------");
            shallowcopy();
       }

}

 

 

 

Main Source) Program.java

 

3. 동작 결과

 

 


이해가 되었으면 합니다.^^

 

[첨부(Attachment)]

Sample-copy.zip

 

반응형

+ Recent posts