자바 코드를 작성하다 보면

클래스명 / 변수명 / 메서드명 등등 이름을 지을 때 생각을 많이 하게 됩니다.
명명 규칙도 규칙이지만 어떠한 단어를 써야 내가 나중에 메서드명을 보았을 때
아! 이 메서드는 어떠한 것이구나 이 변수는 어떠한 것이구나 하고 생각이 듭니다..

그런데 본인은 영어 실력이 별로여서 맨날 옆에 파파고를 끼고 코딩을 합니다
그래서 메서드명을 지을 때 단어만큼이나 중요한 명명 규칙을 한번 소개해 보도록 하겠습니다.

주로 쓰는 반의어는 아래 표로 정리하였습니다.

 

주로 쓰는 반의어는 아래 표로 정리하였습니다.

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

 

 

출처 : https://m.blog.naver.com/reona7140/221306141987

Null 포인터 예외 (java.lang.NullPointerException)는 무엇이며 그 원인은 무엇입니까?

참조 변수 (예 : 객체)를 선언하면 실제로 객체에 대한 포인터가 생성됩니다. 기본 유형의 변수를 선언하는 다음 코드를 고려하십시오. int

int x;
x = 10;

이 예제에서 변수 x는 int이고 자바는 0으로 초기화합니다. 두 번째 줄에 값 10을 지정하면 x로 참조되는 메모리 위치에 값 10이 기록됩니다.
그러나 참조 유형을 선언하려고하면 다른 결과가 발생합니다. 다음 코드를 취하십시오.

Integer num; 
num = new Integer(10);

첫 번째 줄은 num이라는 변수를 선언하지만 실제로 아직 원시 값을 포함하지는 않습니다. 대신 포인터가 포함됩니다 (유형이 참조 유형 인 정수이기 때문에). 아직 무엇을 가리킬 지 말하지 않았기 때문에 Java는 null로 설정합니다. 즉 "나는 아무 것도 가리키고 있지 않습니다."라는 의미입니다.

두 번째 줄에서는 new 키워드를 사용하여 Integer 유형의 객체를 인스턴스화 (또는 생성)하고 포인터 변수 num을 해당 Integer 객체에 할당합니다.

NullPointerException은 변수를 선언했지만 객체를 만들지 않았을 때 발생합니다. 그래서 당신은 실제로 존재하지 않는 무언가를 가리키고 있습니다.

객체를 만들기 전에 num을 참조 해제하려고하면 NullPointerException이 발생합니다. 가장 간단한 경우 컴파일러는 문제를 파악하여 "num이 초기화되지 않았을 수 있습니다."라고 알려주지만 때때로 객체를 직접 생성하지 않는 코드를 작성할 수도 있습니다.
예를 들어 다음과 같은 방법이있을 수 있습니다.

public void doSomething(SomeObject obj) { 
//do something to obj 
}

어떤 경우에는 obj 객체를 만들지 않고 doSomething () 메서드가 호출되기 전에 만들어 졌다고 가정합니다. 다음과 같이 메소드를 호출 할 수 있습니다.

doSomething(null);

이 경우 obj는 null입니다. 이 메소드가 전달 된 객체에 뭔가를하려는 경우 NullPointerException이 throw되는 것이 적절합니다. 프로그래머가 오류이므로 프로그래머가 디버깅을 위해 해당 정보를 필요로하기 때문입니다.

대안으로, 메소드의 목적이 전달 된 객체에서만 작동하는 것이 아닌 경우가 있으므로 null 매개 변수가 허용 될 수 있습니다. 이 경우, 널 (NULL) 매개 변수를 점검하고 다르게 작동해야합니다. 또한 설명서에서 이 내용을 설명해야합니다. 예를 들어 doSomething ()은 다음과 같이 작성할 수 있습니다.

/** * @param obj An optional foo for ____. May be null, in which case 
* the result will be ____. 
*/ 
public void doSomething(SomeObject obj) { 
  if(obj != null) { 
  	//do something 
  } else { 
  	//do something else 
  } 
}

https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it

XSS 크로스 사이트 스크립팅


개요

SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다. 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며,[2] 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다. (나무위키 인용)

보통 자바스크립트를 이용하여 공격하는 경우가 많음.




보안대책

사용자가 입력한 문자열에서 <,>,&,"," 등을 replace등의 문자 변환메소드를 사용하여 &lt,&amp, &quot로 치환

게시판 등에서 html태그 허용 시 html 태그의 리스트를 선정한 후, 해당 태그만 허용하는 방식 적용


코드예제 

파라미터(name)에 <script>alert(document.cookie);</script>와 같은 스크립트 코드가 입력되고, 이 값이 그대로 사용되면 사용자의 쿠키정보가 공격자에게 전송될 수 있는 코딩



외부 입력 문자열에서 replaceAll()메소드를 사용하여 <,>,&," " 같이 스크립트 생성에 사용되는 문자열을 &lt, &gt, &amp, &quot 등으로 변경하면, 파라미터 name에 악성코드가 포함되더라도 스크립트 실행 불가하도록 코딩




참고문헌 및 이미지 출처

행정안전부, 한국인터넷진흥원 - 홈페이지 SW(웹) 개발보안 가이드

행정자치부, 한국인터넷진흥원 - 전자정부SW개발운영자를 위한 JAVA 시큐어코딩 가이드

'보안, 시큐어코딩' 카테고리의 다른 글

랜섬웨어 예방  (0) 2018.12.17
CSRF 사이트 간 요청 위조  (0) 2018.12.17
SQL 인젝션  (0) 2018.12.17

SQL 인젝션


개요

공격자가 입력 폼 및 URL 입력란에 SQL문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안취약점




보안대책

  • 1. preparedStatement 클래스와 하위 메소드 executeQuery(), execute(), executeUpdate()를 사용하는 것이 바람직하다.
  • 2. preparedStatement 클래스를 사용할 수 없는 환경이라면, 입력값을 필터링 처리한 후 사용한다. 필터링 기준은 SQL구문 제한, 특수문자 제한, 길이제한을 복합적으로 사용한다.


코드예제

다음은 안전하지 않은 코드의 예를 나타낸 것으로, 외부로부터 tableName과 name의 값을 받아서 SQL쿼리를 생성하고 있으며, name의 값으로 name' OR 'a'='a를 입력하면 조작된 쿼리문 전달이 가능한 형태의 코딩


외부로부터 인자를 받는 preparedStatement 객체를 상수 스트링으로 생성하고, 인자 부분을 setXXX 메소드로 설정하여, 외부의 입력이 쿼리문의 구조를 바꾸는 것을 방지하는 코딩




참고문헌 및 이미지 출처

행정안전부, 한국인터넷진흥원 - 홈페이지 SW(웹) 개발보안 가이드

행정자치부, 한국인터넷진흥원 - 전자정부SW개발운영자를 위한 JAVA 시큐어코딩 가이드

'보안, 시큐어코딩' 카테고리의 다른 글

랜섬웨어 예방  (0) 2018.12.17
CSRF 사이트 간 요청 위조  (0) 2018.12.17
XSS 크로스 사이트 스크립팅  (0) 2018.12.17

전자정부프레임워크의 페이징 디자인을 변경하기 위해서는 AbstractPaginationRenderer 추상클래스를 구현하면 합니다.


기본 디자인은 요렇게 밋밋합니다.


public class CustomPaginationRenderer extends AbstractPaginationRenderer {
 
	public CustomPaginationRenderer() {
		firstPageLabel 		= "<li><a href=\"#\" class=\"first\" onclick=\"{0}({1}); return false;\">처음으로</a></li>";
        previousPageLabel 	= "<li><a href=\"#\" class=\"prev\" onclick=\"{0}({1}); return false;\">이전으로</a></li>";
        currentPageLabel 	= "<li><a href=\"#\" class=\"active\">{0}</a></li>";
        otherPageLabel 		= "<li><a href=\"#\" onclick=\"{0}({1}); return false;\">{2}</a></li>";
        nextPageLabel	 	= "<li><a href=\"#\" class=\"next\" onclick=\"{0}({1}); return false;\">다음으로</a></li>";
        lastPageLabel 		= "<li><a href=\"#\" class=\"last\" onclick=\"{0}({1}); return false;\">맨뒤로</a></li>";
	}
}

위와 같이 각 프로퍼티의 기능에 맞게 커스터마이징 해줍니다.

{0} 은 js 페이지 이동 함수, {1}은 pageNo 가 됩니다.

태그에 class가 지정되어 있으니 디자이너에게 맡기면 멋진 페이징바가 완성되겠죠!! (아니면 직접 css를 작성해도 되죠!!)


작성한 클래스를 등록해야 합니다.

스프링 설정파일을 열어서 다음과 같이 등록해 줍니다.


<bean id="customPagingRenderer" class="cmmn.base.web.CustomPaginationRenderer"/>


<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">

    <property name="rendererType">

        <map>

            <entry key="customRenderer" value-ref="customPagingRenderer"/> 

        </map>

    </property>

</bean>


jsp에서는 요렇게,,


<div class="paging">

    <ul>

        <ui:pagination paginationInfo="${paginationInfo}" type="customRenderer" jsFunction="linkPage"/>

    </ul>

</div>



참고사이트

http://www.egovframe.go.kr/wiki/doku.php



'전자정부프레임워크' 카테고리의 다른 글

Sublimetext 단축키 기능  (0) 2019.11.13

+ Recent posts