1. 개발 환경 구성
개발환경 : 이클립스 2022-09
JDK : 1.8
https://www.eclipse.org/downloads/download.php?file=/oomph/epp/2022-09/R/eclipse-inst-jre-win64.exe
The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 415 open source projects, including runtimes, tools and frameworks.
www.eclipse.org
2. 환경변수 설정
내 PC -> 속성 -> 고급 시스템 설정 -> 환경 변수 -> 새로만들기 -> 변수이름 : JAVA_HOME, 변수 값 : C:\Program Files\Java\jdk1.8.0_351 -> Path 편집 -> 새로만들기 -> %JAVA_HOME%\lib
자바 환경변수 설정
자바 버전 확인
3. Maven과 log4j
3.1 Maven
- Application을 개발하기위해 반복적으로 진행해왔던 작업들을 지원하기 위한 도구
- 빌드, 패키징, 문서화, 테스트, 테스트 리포팅, git, 의존성 관리, 배포 등 작업을 손쉽게 가능하게 해준다.
3.1.1 Maven의 장점
- 편리한 의존성 라이브러리 관리
- 컴파일과 빌드를 동시에 수행가능하다.
- IDE에 종속된 부분들을 제거할 수 있다.
3.1.2 Maven의 단점
- 기본적으로 지원하지 않는 빌드 과정을 추가해야하는 경우 상당히 복잡해진다.
- 특정 플로그인 설정이 조금만 달라지면, 해당 설정을 분리해서 중복 기술할 때가 발생한다.
- 위와 같은 상황이 생기면 설정이 길어지고 가독성 저하가 발생하여 재사용성 및 확장성을
떨어뜨려 유지보수가 어려워진다.
3.1.3 Maven의 구조
Maven의 구조
3.2 Pom ( Project Object Model )
- 프로젝트 필수 정보
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.barunsw.ojt</groupId>
<artifactId>OJT</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>.신입사원OJT</name>
</project
사진 설명을 입력하세요.
[ dependencies ]
- 필수사항
- 의존성을 정의하는 라이브러리를 불러오는 부분
- 프로젝트에서 import되는 dependency 모음
[ dependencies - dependency ]
- 하위에 groupId, atrifactId 필수
- maven repository 들어가서 필요한 dependency 검색 usage가 가장 높은 것 권장
[ dependencies - dependency - groupId ]
- 프로젝트의 그룹 Id, 도메인이나 특정한 정보로 식별
- ex) import org.apache.logging.log4j.Logger;
[ dependencies - dependency - artrifactId ]
- 프로젝트의 artifactId
- version.packaging의 형태로 artifact 파일 생성
[ dependencies - dependency - version ]
- 프로젝트의 버전
3.3 log4j 란?
- Apache에서 만든 로깅을 위한 자바 기반의 오픈소스 라이브러리로 디버그용 도그로 주로 사용한다.
- Log4j의 약자는 Log for java로 jakarta-project에서 Java를 위한 프로젝트 중 하나로 처음부터
Java예외를 위해 설계되었다.
3.4 로깅이란?
- 시스템을 작동할 때 시스템의 작동상태 기록, 보존 및 시스템 동작의 분석 등을 하기위해 작동 중의
각종 정보를 기록하여 둘 필요가 있다. 이 때 생기는 문제를 개발자가 알 수 있게 도와준다.
3.4.1 Logger : 로깅 메세지를 Appender에게 전달
3.4.2 Appender : 전달된 로깅메세지를 파일에 기록할 것인지 콘솔에 출력할지 매개체 역할을 한다.
3.4.3 Layout : Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할지 Layout을 결정한다.
※ log4j.xml이 들어있는 resource폴더 까지 빌드에 포함시켜야 코드가 실행된다. ※
OJT-master폴더 선택 - Build path - configure Build Path - Add class Folder - resources
사진 설명을 입력하세요.
레벨 값
- ALL : 모든 로깅
- TRACE : 세밀한 로깅
- DEBUG : 디버그 로깅
- INFO : 강조 로깅
- WARN : 경고 로깅
- ERROR : 오류 로깅
- FACTAL : 심각한 오류 로깅
- OFF : 로깅 해제
패턴 ( 대소문자 구분 )
- %c, %logger : 해당 로그를 쓰는 로거의 이름.
- %C, %class : 해당 로그를 요청한 클래스 이름
- %d, %date : 해당 로그가 발생한 시간
- %enc, %encode : 특정 언어에서의 출력을 위한 문자 인코딩
- %ex, %exception, %throwable : 예외 로그. 길이를 설정할 수 있음.
- %F, %file : 해당 로그가 발생한 클래스 파일명
- %l, %location : 해당 로그가 발생한 클래스명.메소드명(파일:라인)
- %L, %line : 해당 로그가 발생한 라인 번호
- %m, %msg, %message : 로그문에 전달된 메시지
- %n : 줄바꿈
- %p, %level : 로그 레벨
- %r, %relative : 로그 처리시간
- %t, %thread : 해당 로그가 발생한 스레드명
- %style{pattern}{ANSI style} : ANSI를 사용해 특정 패턴을 스타일링함
- %highlight{pattern}{style} : 로그 레벨명을 ANSI 색깔로 하이라이트
4. Coding Standard
4.1 포맷 형식
- 내용은 80자 이내로 작성해야 하며, 이를 위한 줄 바꿈은 논리적으로 구분되어야 한다.
- 클래스 선언은 한 줄로 하되, 논리적으로 나눌 수 있을 경우 80자 룰을 따른다.
ex ) class SomeClass extends AnotherClass implements SomeInterface { ... }
- 메소드 선언 형식은 프로젝트마다 둘 중 하나의 방식으로 일관성 있게 작성한다.
1. 메소드 선언 후 중괄호를 바로 여는 경우
ex ) Braces at end of declaration public void someMethod () {
...
}
2. 메소드 선언 후 개행하여 중괄호를 여는 경우
ex ) public void someMethod ()
{
...
}
- 메서드 이름 뒤에는 공백이 있으면 안된다.
doSomething(currentFile); <<< doSomething (currentFile);
- 연산자 사이에는 공백을 사용한다.
a = (b + c) * d; <<< a=(b+c)*d;
- 자바 예약어 뒤에는 공백이 있어야 한다.
while (true) <<< while(true)
- 콤마( , ) 뒤에는 공백이 있어야 한다.
doSomething (a, b, c, d); <<< doSomething (a,b,c,d);
- 콜론 ( : ) 의 앞뒤는 공백이 있어야 한다.
case 100 : <<< case 100:
- 문장의 세미콜론 뒤에는 공백 문자가 와야 한다.
for (i = 0; i < 10; i++) for (i=0;i<10;i++)
- 메소드 사이에는 한 줄의 공백을 두어야 한다.
- 탭의 크기는 4칸의 공백으로 한다.
- 조건문에는 항상 중괄호를 사용한다.
사진 설명을 입력하세요.
4.2 주석
- 패키지 이름 아레에 회사에서 정해진 주석 템플릿을 따른다.
- 클래스 안에 있는 모든 메소드는 자바 doc generation의 규칙에 맞게 헤더를 작성하는것을 권장한다.
- 코드 안에서 /* */ 주석은 사용하지 않는것이 좋다. ( // 사용 )
- 오픈소스 라이센스 명시사항을 임의로 바꾸거나 지워서는 안된다.
4.3 작명 규칙
- 패키지 이름은 소문자이고 단수여야 한다.
- 관련된 기능으로 패키지를 묶어야 한다.
- 패키지 이름은 com.회사명.제품명.하위시스템.[컴포넌트.[어플리케이션]] 으로 지어야한다.
com.barun.ojt.jmlee.day01
- 클래스 이름은 명사로 짓고, 명사의 첫 글자는 대문자로 한다.
FilePrefix
- 예외 클래스는 Exception을 붙여야 한다.
class AccessException
- 메소드 이름은 동사로 짓고, 소문자로 시작해야한다.
computeTotalWidth()
- 일반적인 약어는 첫 글자만 대문자로 한다.
exportHtmlSource(); <<< exportHTMLSource();
- 변수의 이름은 소문자로 시작한다.
fileFrefix
- 범위가 크기에 따라 이름의 길이를 결정한다.
int i = 0; int iIndex = 0;
- final변수는 모두 대문자를 사용하고 단어사이를 _ 로 구분한다.
MAX_LENGTH
- 연관된 final 변수는 같은 접두사를 가지게 한다.
final int COLOR_RED = 1;
final int COLOR_GREEN = 2;
- 오브젝트의 이름을 메소드 안에 사용하는 것을 지양한다.
line.getLength(); line.getLineLength();
- 약어를 사용하는 작명을 지양한다.
Average <<< Avg
- 제네릭 변수는 타입과 같은 이름을 갖는다.
void setTopic (Topic topic) <<< void setTopic (Topic value)
4.4 좋은 코딩 습관
- 클래스 메소드는 범위나 접근성 보다는 기능을 중심으로 묶여야 한다
- get / set / is 용어들은 직접적인 접근이 가능할 때 사용해야한다.
- 일시적으로 큰 메모리를 사용하는 오브젝트는 사용 후 null을 참조하게 하여 메모리를 절약한다.
big_splash_image = null;
- static 메소드를 사용할 땐 때는 클래스명으로 접근한다.
- 최적화 할 필요 없는 코드까지 최적화 하지 않는다.
k = i + j ; <<< d = ( k = i + j ) + r;
d = k + r;
- switch 구문에서 꼭 default 조건을 사용한다.
- switch 구문에서 break를 사용하거나 주석을 달아줘야 한다.
- String을 비교할 때는 equals나 compareTo를 사용한다.
- String을 비교할 때는 null Pointer Exception을 방지하기 위해 변하지 않은 문자열을 기준으로 비교한다.
- String + 연산을 지양한다.
- 반복문 안에서의 String + 연산을 피해야 한다.
- public 인스턴스 변수는 사용을 지양한다.
- 메소드의 리턴 값으로 변경 가능한 오브젝트의 사용을 지양한다. 필요하다면 이유를 문서로 작성한다.
- 클래스 멤버의 가시성을제한해야 한다.
- if문의 중첩을 제한한다.
- 복잡한 반복문은 피해야 한다.
- 문자열에 문자를 추가할 때는 StringBuffer의 append를 통해 추가해야한다.
- 0과 1이 아닌 다른 수는 매직넘버를 쓰는 것을 고려해봐야 한다.
- 변수의 범위를 줄인다. ( 변수는 메서드가 시작할 때 정의하지 않고 필요할 때 정의한다. )
- 다중 문자열 연결은 피한다.
'인턴' 카테고리의 다른 글
[인턴 OJT 6일차] File I/O , DBAddressImpl 수정 및 복습 (0) | 2022.12.20 |
---|---|
[인턴 OJT 5일차] Java DB 연동 select, insert (0) | 2022.12.16 |
[인턴 OJT 4일차] 직렬화 ( serialization ), file i/o 기반 주소록 (0) | 2022.12.15 |
[인턴 OJT 3일차] Static, File I/O, Static, bit/byte (0) | 2022.12.14 |
[인턴 OJT 2일차] slf4j, java.lang.*, String 메서드, Wrapper Class(래퍼 클래스) (1) | 2022.12.13 |