자바 명명 규칙 - 클래스 / 메서드 / 변수

 

전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018 from devCAT Studio, NEXON

주로 쓰는 반의어 

get / set
add / remove
create / destroy
start / stop
insert delete
increment / decrement
old / new
begin / end
girst / last
up / down
min / max
next / previous
open /close
show /hide
suspend /resume
parent / child

받다/ 받다
추가/제거
창조/파괴하다
시동/정지
삽입/삭제
증가/감소
구/신
시작/끝
긴/마지막
위/아래
최소/최대
다음/이전
열다/ 닫다
보이다/ 숨기다
일시 정지/재개하다
부모/아이

 0. 공통 명명 규칙

대소문자가 구분되며 길이에 제한이 없다.
예약어를 사용해서는 안 된다.
숫자로 시작해서는 안 된다.
특수문자는 '_' 와 '$'만을 허용한다.
파스칼 표기법 (PascalCase)과 카멜 표기법(camelCase)를 사용한다.
      PascalCase : 모든 단어에서 첫 번째 문자는 대문자이며 나머지는 소문자이다.
      camelCase : 최초에 사용된 단어를 제외한 첫 번째 문자가 대문자이며 나머지는 소문자이다.
반의어는 반드시 대응하는 개념으로 사용해야 한다.

1. 패키지(Package) 명명 규칙

패키지명은 표준 패턴을 따라야 한다.
Ex) [com].[Company].[Project].[TopPackage].[LowerPackage]

패키지명은 가급적 한 단어의 명사를 사용한다.
Ex) 좋은 예 : com.nexon.sudden.member.object
Ex)  나쁜 예 : sudden.memberObject


2. 클래스(Class) 명명 규칙

클래스명에는 파스칼을 사용한다.
Ex) public class HelloWorld {}

인터페이스에는 특별한 접두사나 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) public interface Animal {}

인터페이스를 구현한 클래스에는 특별한 접두사나 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) public class Tiger implements animal{}

추상 클래스에는 특별한 접두사 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) public abstract class Animal {}


3. 메소드(Method) 명명 규칙

메소드명에는 파스칼 표기법을 사용한다.
Ex) public void SendMessage(String message) {}

속성에 접근하는 메소드명의 접두사는 'get','set'을 사용한다.
Ex) public void setDisplayName
Ex) public void getDisplayName

데이터를 조회하는 메소드명의 접두사는 find를 사용한다.
Ex) public void findData(String data){}

데이터를 입력하는 메소드명의 접두사는 input을 사용한다.
Ex) public void inputData(HashMap data){}

데이터를 변경하는 메소드명의 접두사는 modify를 사용한다.
Ex) public void modifyData(HashMap data){}

데이터를 삭제하는 메소드명의 접두사는 delete를 사용한다.
Ex) public void deleteData(String data){}

데이터를 초기화 하는 메소드명의 접두사는 initialize을 사용한다.
Ex) public void initData(String data){}

반환값의 타입이 boolean인 메소드는 접두사로 is를 사용한다.
Ex) public void isData(String Data){}

데이터를 불러오는 메소드명의 접두사는 load를 사용한다.
Ex) public void loadData(){}

데이터가 있는지 확인하는 메소드명의 접두사는 has를 사용한다.
Ex) public void hasData(){}

보다 지능적인 set이 요구될때 사용하는 메소드명의 접두사는 register를 사용한다.
Ex) public void registerAccount(){}

새로운 객체를 만든뒤 해당 객체를 리턴해주는 메소드명의 접두사는 create를 사용한다.
Ex) public void createAccount(){}

해당 객체를 다른 형태의 객체로 변환해주는 메소드명의 접두사는 to를 사용한다.
Ex) public void toString(){}

해당 객체가 복수인지 단일인지 구분하는 메서드명의 접미사는 s를 사용한다.
Ex) public void getMembers(){}

B를 기준으로 A를 하겠다는 메소드명의 전치사는 By를 사용한다.
Ex) public void getUserByName(String name){}

반환값의 타입이 boolean인 메소드는 접두사로 is를 사용한다.
Ex) public void isData(String Data){}

데이터를 불러오는 메소드명의 접두사는 load를 사용한다.
Ex) public void loadData(){}

데이터가 있는지 확인하는 메소드명의 접두사는 has를 사용한다.
Ex) public void hasData(){}

보다 지능적인 set이 요구될때 사용하는 메소드명의 접두사는 register를 사용한다.
Ex) public void registerAccount(){}

새로운 객체를 만든뒤 해당 객체를 리턴해주는 메소드명의 접두사는 create를 사용한다.
Ex) public void createAccount(){}

해당 객체를 다른 형태의 객체로 변환해주는 메소드명의 접두사는 to를 사용한다.
Ex) public void toString(){}

해당 객체가 복수인지 단일인지 구분하는 메서드명의 접미사는 s를 사용한다.
Ex) public void getMembers(){}

B를 기준으로 A를 하겠다는 메소드명의 전치사는 By를 사용한다.
Ex) public void getUserByName(String name){}

4. 변수(Variable) 명명 규칙

변수와 메소드의 파라미터에는 카멜표기법을 사용한다.
변수에 약어를 사용하지 않고 모든 의미를 충분히 담는다.
한 글자로 된 이름을 사용하지 않는다.
선언된 지점에서 초기화하며, 가능한 사용범위를 최소화 한다. 숫자 0 레퍼런스 null
반복문에서 인덱스로 사용할 변수는 i,j,k 등으로 사용한다.
Ex) for(int i = 0; i < 10; i++){}

지역변수와 멤버변수(전역변수)는 변수명 앞에 밑줄(_)을 사용하여 구별한다.
boolean타입의 변수는 접두사로 is를 사용한다 Ex) isCheck

Posted by 홍반장水 홍반장水

댓글을 달아 주세요

JAVA excel - [POI] POI 엑셀 - Using newlines in cells ( 셀에서 줄바꿈 )

 CellStyle cs = wb.createCellStyle();
    cs.setWrapText(true);
    cell.setCellStyle(cs);

   Workbook wb = new XSSFWorkbook();   //or new HSSFWorkbook();
    Sheet sheet = wb.createSheet();

    Row row = sheet.createRow(2);
    Cell cell = row.createCell(2);
    cell.setCellValue("Use \n with word wrap on to create a new line");

    //to enable newlines you need set a cell styles with wrap=true
    CellStyle cs = wb.createCellStyle();
    cs.setWrapText(true);
    cell.setCellStyle(cs);

    //increase row height to accomodate two lines of text
    row.setHeightInPoints((2*sheet.getDefaultRowHeightInPoints()));

    //adjust column width to fit the content
    sheet.autoSizeColumn((short)2);

    FileOutputStream fileOut = new FileOutputStream("ooxml-newlines.xlsx");
    wb.write(fileOut);
    fileOut.close(); 

Posted by 홍반장水 홍반장水

댓글을 달아 주세요

[POI] POI 엑셀 - Using newlines in cells ( 셀에서 줄바꿈 )
//////////////////////////////
cs.setWrapText( true );
//////////////////////////////////

 

// 엑셀 파일 로드
HSSFWorkbook wb = excelService.loadWorkbook(sb.toString());
 
HSSFSheet sheet = wb.createSheet("cell test sheet2");
sheet.setColumnWidth((short) 3, (short) 200);	// column Width
 
HSSFCellStyle cs = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setFontHeight((short) 16);
font.setBoldweight((short) 3);
font.setFontName("fixedsys");
 
cs.setFont(font);
cs.setAlignment(HSSFCellStyle.ALIGN_RIGHT);	// cell 정렬
cs.setWrapText( true );
 
for (int i = 0; i < 100; i++) {
	HSSFRow row = sheet.createRow(i);
	row.setHeight((short)300); // row의 height 설정
 
	for (int j = 0; j < 5; j++) {
		HSSFCell cell = row.createCell((short) j);
		cell.setCellValue(new HSSFRichTextString("row " + i + ", cell " + j));
		cell.setCellStyle( cs );
	}
}
 
// 엑셀 파일 저장
FileOutputStream out = new FileOutputStream(sb.toString());
wb.write(out);
out.close();

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:excel

 

egovframework:rte2:fdl:excel [eGovFrame]

Excel 파일 포맷을 다룰 수 있는 자바 라이브러리를 제공하여, 사용자들이 데이터를 Excel 파일 포맷으로 다운받거나, 대량의 Excel 데이터를 시스템에 올릴 수 있도록 지원하기 위한 서비스이다. Excel 서비스는 Apache POI 오픈소스를 사용하여 구현하였으며 주요 Excel접근 기능 외에 Excel 다운로드, Excel 파일 업로드 등의 기능이 있다. 엑셀 파일을 생성하여 지정된 위치에 저장하는 기능을 제공한다. HSSFWorkbook 인스

www.egovframe.go.kr

 

Posted by 홍반장水 홍반장水

댓글을 달아 주세요

[Java] 문자열 치환(Replace) 사용법 & 예제

String a = "무궁화 삼천리 화려강산 대한사람 대한으로 길이 보전하세 ";	
//replace([기존문자],[바꿀문자])
a= a.replace("대한", "민국");	
System.out.println(a);

//결과값 : 무궁화 삼천리 화려강산 민국사람 민국으로 길이 보전하세
String a = "무궁화 삼천리 화려강산 대한사람 대한으로 길이 보전하세 ";	
//replaceAll([정규식],[바꿀문자])
a= a.replaceAll("대한", "민국");
System.out.println(a);

//결과값 : 무궁화 삼천리 화려강산 민국사람 민국으로 길이 보전하세
Posted by 홍반장水 홍반장水

댓글을 달아 주세요

#java #SimpleFormat #Calendar #yesterday #yyyyMMdd

      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
      SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMM");
      Calendar c1 = Calendar.getInstance(); 
      c1.add(Calendar.DATE, -1); // 오늘날짜로부터 -1 
      String yesterday = sdf.format(c1.getTime()); // String으로 저장
      String yesterMon = sdf2.format(c1.getTime()); // String으로 저장
Posted by 홍반장水 홍반장水

댓글을 달아 주세요

#NumberformatException #if #문자 #1글자비교  #equals #MyBatis #JAVA #자바

ex 1)
<if test="stringValue == 'Y'">
</if>

ex 2)
<if test="condition.equals('Y')">
</if>


지금처럼 한 글자를 다이나믹쿼리 IF  안에서 비교할 때

java.lang.NumberFormatException: For input string: "Y" 에러 또는

비교가 되지 않을 수 있다. (인식 불가 혹은 오작동 가능성도 있음)
결론적으로 위 현상은 myBatis 문제는 아니고

OGNL(Object Graph Navigation Language) 의 문제이다.

OGNL 인터프리터에서는 위 구문의 'Y' 를 char 형으로 인식하고,
'YY' 나 "Y" 는 String으로 인식한다. (따옴표를 잘보자)
그래서  이와 같은 구문을 비교할 때 
 NumberFormat으로 비교를 시도하여 Exception이 발생한다.
이유는 java의 char형은 실제로 문자의 코드값을 저장하기 때문이다.

그래서 아래와 같은 형변환이 가능하다.

char y = 'Y';
int code = (int)y; // code에는 Y의 코드값인 89가 저장된다

그래서 위와 같은 상황을 피하기 위해서는 다음과 같은 해결책이 존재한다.

1. <if test='stringValue == "Y"'> – 쌍따옴표와 홑따옴표의 위치를 변경

2. <if test="stringValue == &quot;Y&quot;"> – 쌍따옴표를 HTML 코드로 변경

3. <if test="stringValue == 'Y'.toString()"> – toString() 함수를 사용해 String 형으로 변환

4. 함수 생성 (equals 함수를 새로 생성하고 가져다 쓰는 방법 )




http://cofs.tistory.com/97 에서 설명하고 있는
함수를 생성해서
사용방법을 참조하여 equals함수를 재정의

1번과 4번 방법을 추천한다.


출처: https://cofs.tistory.com/96 [CofS]

Posted by 홍반장水 홍반장水

댓글을 달아 주세요

IoT 개발 위한 3가지 프로그래밍 언어 "C, 자바, 파이썬"

10년 전만 해도, 사용량에 따라 성능을 개선할 수 있는 에어컨을 사용한다거나 자율적으로 교통을 항해할 수 있는 자율주행차(self-driving cars)를 운행해 볼 수 있다고 상상할 수 있었을까. 하지만 둘 다 현실이 됐다. 이러한 스마트한 기기들이 어떻게 작용하는지 궁금하다면, 그 대답은 사물 인터넷(Internet of Things, IoT)이다.

잘 알다시피, IoT 기술의 목적은 데이터를 측정, 수집 및 분석해 더 나은 고객 경험(customer experience)을 제공하고 제품의 품질을 높이는 것이다. 다시 말해, IoT 기능은 도시, 집, 그리고 사업을 더 나아지게 만드는 것이다.

IoT 기술의 세 가지 단계인 측정(measurement), 수집(collection), 분석(analysis)은 각각 제약 조건이 서로 다른 작업 환경을 가지고 있다. 일례로  데이터는 기능이 제한된 디바이스의 센서를 통해 측정된다. 그런 다음 이 데이터는 스마트폰의 앱과 같은 게이트웨이(gateway)와 디바이스 보다 완전히 다른 컴퓨팅 성능을 가진 소형 콘솔(console)을 사용해 집계되고 전송된다. 이 데이터는 클라우드를 이용해 저장 및 분석된다.

따라서 소프트웨어 개발 단계마다 IoT 프로그래밍 언어가 다를 수 있다. 실제 이클립스 재단(Eclipse Foundation)이 2018년 1월부터 3월까지 502명이 참여한 IoT 개발자 설문조사를 진행했는데, 설문조사에 따르면 개발자들은 C, C++, Java, JavaScript, Python, PHP와 같은 몇 개의 다른 IoT용 프로그래밍 언어를 사용하는 것으로 나타났다. 특히 이번 조사에 따르면 자바가 66.5%의 인기를 얻으며 전반적인 리더라는 것을 보여준다. C는 56.9%로 그 뒤를 이었고, 자바스크립트(JS)와 파이썬(Python)이 각각 47.1%와 46%로 뒤를 이었다. 이클리스 재단은 2015년부터 전 세계 IoT 개발업체에서 일하는 개발자들을 대상으로 이 분야의 전반적인 환경, 과제, 동향을 파악해 왔다.

이와 관련 최근 IoT 전문매체 아이오티포올닷컴(iotforall.com)은 C, 자바, 파이썬 등 IoT 개발을 위한 상위 3개 프로그래밍 언어에 대해 분석해 보도했다.

먼저 C 언어는 디바이스 수준에서 컴퓨팅 파워(computing power, 연산력)은 상당히 제한적이다. 낮은 수준의 코드(즉, 하드웨어 레이어에 가까운 코드)를 쓰는 데 이상적이고 프로세싱 파워(processing power, 처리능력)이 많이 필요하지 않으며 RAM과 직접 작동할 수 있다. 또한 C는 마이크로컨트롤러 프로그래밍(microcontroller programming)의 공통 언어로, 센서 및 게이트웨이 하드웨어 레이어 애플리케이션의 경우 쉽게 처리할 수 있다. 하지만 C는 매우 낮은 수준의 언어이기 때문에 개발자들이 능숙하지 않으면 C의 신택스(syntax, 구문)이 빠르게 어수선해지고 흐트러질 수 있다.

다음으로 자바는 프로그래밍 세계에서 널리 사용되고 가르쳐진다. IoT 애플리케이션에서는 자바 가상 머신(Java Virtual Machine, JVM) 코드를 어떤 칩으로도 전송할 수 있다. 이 코드는 스마트폰과 서버처럼 JVM이 흔한 곳에서 사용될 수 있다. IoT 소프트웨어에 이상적으로 적합하도록 작은 기계에도 사용할 수 있다. 이밖에 자바 언어는 IoT를 위한 객체지향 프로그래밍 언어(object-oriented programming language)다. 또한 IoT 응용프로그램에 유용한 내장 기능을 가지고 있고 휴대성이 뛰어나며 하드웨어 제한이 없다.

마지막으로 파이썬은 고급 스크립팅(scripting) 언어로서의 입지를 구축해 가고 있다. 파이썬은 많은 유용한 라이브러리(library, 파일들의 모음)을 가지고 있고, 더 적은 수의 코드 행수(lines of code)로 더 많은 것들을 할 수 있다. 이 때문에IoT 시스템 데이터 분석에 이상적이다. 또한 파이썬의 소스 코드는 신택스가 깨끗하기 때문에 컴팩트하고 알기 쉽다. 아울러 배우기 쉽고, 널리 사용되며, 강하게 지지된다. 이밖에 똑같이 복잡한 코드베이스(codebases)를 유지하지 않고도 복잡한 데이터 스트림(data streams)을 관리하고 구성할 수 있다. 파이썬은 계산 수요(computational demand)가 적당히 낮은 단순한 모듈형 프로젝트(modular projects)로 인기를 얻고 있다.

한편 매체는 "IoT 사용이 증가함에 따라 제품 성능, 도전, 기회에 대한 더 많은 데이터가 생성될 것이다. 그리고 어떤 프로그래밍 언어가 IoT 제품이나 서비스에 더 잘 적용되는지 더 잘 이해할 수 있을 것이다"면서 "이 데이터를 분석하면 IoT 개발의 특정 시나리오에 가장 적합한 시스템 레벨 프로그래밍 언어를 더 잘 이해할 수 있다. 그때까지 IoT 소프트웨어 개발은 여러 언어로 진행될 전망이다"고 전했다.

 

https://www.codingworldnews.com/229

 

IoT 개발 위한 3가지 프로그래밍 언어 "C, 자바, 파이썬" - 코딩월드뉴스

10년 전만 해도, 사용량에 따라 성능을 개선할 수 있는 에어컨을 사용한다거나 자율적으로 교통을 항해할 수 있는 자율주행차(self-driving cars)를 운행해 볼 수 있다고 상상할 수 있었을까. 하지만 둘 다 현실이 됐다. 이러한 스마트한...

www.codingworldnews.com

 

Posted by 홍반장水 홍반장水

댓글을 달아 주세요

#java #오늘 #일자 #string #format #YYYYMMDD

오늘 날짜를 문자 YYYYMMDD  포맷으로 나오게 하는 방법

import java.util.Calendar;

import java.text.SimpleDateFormat;



public class testToday{

    public static void main(String args[]){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

        Calendar c1 = Calendar.getInstance();

	 String strToday = sdf.format(c1.getTime());



        System.out.println("Today=" + strToday);

    }

}
Posted by 홍반장水 홍반장水

댓글을 달아 주세요

#iBATIS 와 #MyBatis 의 차이

iBATIS

MyBatis

태그

설명

태그

설명

 <isEqual>

 property 값이 같을때만 쿼리 실행 

 <if>와

<choose>, <when>, <otherwise>

 일반 개발언어의 

if or if ~ else와 동일

 <isNotEqual>

 property 값이 같지 않을 때만 쿼리 실행 

 <isGreaterThan>

 property 값이 비교값보다 클 경우 쿼리 실행 

<isGreaterEqual> 

 property 값이 비교값보다 같거나 클 경우 쿼리 실행

 <isLessEqual>

 property 값이 비교값보다 작거나 같을경우 쿼리 실행

 <isPropertyAvailable>

 property 값이 유효할 경우 쿼리 실행

 <isNotPropertyAvailable>

 property 값이 유효하지 않을 경우 쿼리 실행

 <isNull>

 property 값이 null일 경우 쿼리 실행 

<isNotNull> 

 property 값이 null이 아닐 경우 쿼리 실행 

<isEmpty> 

 property 값이 비어있을경우 쿼리 실행

<isNotEmpty> 

 property 값이 비어있지 않을경우 쿼리 실행 

 <isParameterPresent>

 parameter가 있을경우 쿼리 실행

<isNotParameterPresent> 

 parameter가 없을경우 쿼리 실행

<iterate> 

 배열 타입의 파라미터를 받을 때 활용

 <foreach>

 배열 타입의 파라미터를 받을 때 활용 

<dynamic> 

 하위 태그에 일치하는 내용이 존재할 경우   where절을 붙인다.

<where>, <trim> 

 iBATIS의 <dynamic>과 같이 조건에 따라 where절을 추가할 때 사용

 

 

 <set>

 동적으로 update 구문을 만들 때 사용

   

 <bind>

 변수를 생성하는 태그 

 


  

4       iBatis


  

  

MyBatis 


  

비고


  

  

com.ibatis.*


  

  

org.apache.ibatis.*


  

  

패키지 구조 변경


  

  

SqlMapConfig


  

  

Configration


  

  

용어변경


  

  

sqlMap


  

  

mapper


  

  

용어변경


  

  

sqlMapClient


  

  

sqlSession


  

  

구문대체


  

  

rowHandler


  

  

resultHandler


  

  

구문대체


  

  

resultHandler


  

  

SqlSessionFactory


  

  

구문대체


  

  

parameterMap, parameterClass


  

  

parameterType


  

  

속성 통합


  

  

resultClass


  

  

resultType


  

  

용어변경


  

  

#var#


  

  

#{var}


  

  

구문대체


  

  

$var$


  

  

${var}


  

  

구문대체


  

  

<isEqual> , <isNull>


  

  

<if>


  

  

구문대체


  

.

Posted by 홍반장水 홍반장水

댓글을 달아 주세요

[JSTL] Tag가 jsp 화면에 그대로 노출될 경우, escapeXml  

JSTL로  처리를 할 때, 태그가 적용이 안되고 화면에 그대로 노출이 될 때가 있다.

기본적으로 escapeXml 이라는 값이 true로 처리가 되고, 이 속성은 <, > 와 같은 값들을 <, > 등으로 변경하여 화면에 뿌려주게 된다.

하지만, 태그를 원하는 대로 뿌려줘야 할 경우도 존재하니 이럴 경우 escapeXml="false" 처리를 해주면 된다.

<c:out value="${값}" />
<c:out value="${값}" escapeXml="false" />
 
Posted by 홍반장水 홍반장水

댓글을 달아 주세요