Index: 313DEVGRP개발룰.txt =================================================================== diff -u -r67cae89adb177231fbea9029bda4436a470cd8a6 -r1d7aa798a3c473a2b693be20036b8bcd75dbbcd2 --- 313DEVGRP개발룰.txt (.../313DEVGRP개발룰.txt) (revision 67cae89adb177231fbea9029bda4436a470cd8a6) +++ 313DEVGRP개발룰.txt (.../313DEVGRP개발룰.txt) (revision 1d7aa798a3c473a2b693be20036b8bcd75dbbcd2) @@ -10,7 +10,6 @@ Ex) 좋은 예 : com.nexon.sudden.member.object Ex) 나쁜 예 : sudden.memberObject - 2. 클래스(Class) 명명 규칙 클래스명에는 파스칼을 사용한다. @@ -72,38 +71,7 @@ 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 Index: core-module/src/test/java/tutorial/Chapter02.java =================================================================== diff -u --- core-module/src/test/java/tutorial/Chapter02.java (revision 0) +++ core-module/src/test/java/tutorial/Chapter02.java (revision 1d7aa798a3c473a2b693be20036b8bcd75dbbcd2) @@ -0,0 +1,145 @@ +package tutorial; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.Scanner; + +public class Chapter02 { + + private int x; + private int y; + private int tmp; + + @Before + public void setUpVariable() { + this.x = 10; + this.y = 5; + this.tmp = 0; + } + + @Test + public void sortTest() { + // 두 값 교환하기 + this.tmp = this.x; + this.x = this.y; + this.y = this.tmp; + assertEquals(5, this.x); + assertEquals(10, this.y); + } + + @Test + public void namingTest() { + // 일반 변수는 camelCase로 표현 + int rectangleArea = 20 * 10; + System.out.println("rectangleArea: " + rectangleArea); + + // 상수는 대문자를 이용하여 명명 (암묵적인 관례) + final int MAX_VALUE = 5; + System.out.println("MAX_VALUE: " + MAX_VALUE); + + // 컴파일러 에러. 상수는 재할당 불가능 + // MAX_VALUE = 10; + + // 상수는 선언과 동시에 초기화를 해야함 + final int MAX_SPEED; + // System.out.println("MAX_SPEED: " + MAX_SPEED); // 컴파일러 에러. + } + + @Test + public void concatStringByAddOperatorTest() { + // 일반 더하기 연산 + System.out.println(this.x + this.y); + + // 더하기 연산으로 문자열을 합칠 수 있다. + System.out.println("Hello" + "World"); + + // 연산은 왼쪽부터 실행 + assertEquals("77", 7 + "7"); + assertEquals("147", 7 + 7 + "7"); + assertEquals("777", 7 + "7" + 7); + assertEquals("777", "7" + 7 + 7); + + // 응용하여 정수를 문자열로 casting 가능 + assertEquals("7", "" + 7); + assertEquals("7", 7 + ""); + } + + @Test + public void functionalPrintfTest() { + // character 문자 + // \n 대신 %n을 사용한다. OS마다 개행하는 문자가 다를 수 있기 때문에 %n이 더 안전하다. (p.36 참고) + System.out.printf("char: %c%n", 'A'); + + // int 정수 + System.out.printf("int: %d%n", 5); + System.out.printf("int(우측 정렬): [%3d]%n", 5); + System.out.printf("int(좌측 정렬): [%-3d]%n", 5); + System.out.printf("int(0으로 빈공간 채우기): [%03d]%n", 5); + + // float 실수 + System.out.printf("float: %f%n", 1.3f); + System.out.printf("float(총 7자리까지 표현 가능): %f%n", 1.873467854678896f); // 나머지 반올림 + + // exponent 지수 + System.out.printf("exponent: %e 또는 %E%n", 1234.56f, 1234.56f); + + // oct 8진수 + System.out.printf("oct: %o%n", 20); // 10진수를 8진수로 출력 + System.out.printf("oct: %o%n", 020); // 8진수는 앞에 0을 붙여서 표현 + + // hex 16진수 + System.out.printf("hex: %x%n", 64); // 10진수를 16진수로 출력 + System.out.printf("hex: %x%n", 0x64); // 16진수는 0x를 붙여서 출력 + + // String 문자열 + // (참고. String은 primitive 타입이 아니고 Class다.) + System.out.printf("String: %s%n", "Hello, Java!"); + System.out.printf("String: [%.8s]%n", "Hello, Java!"); // 왼쪽에서 8글자만 출력 + + // binary 2진수 + System.out.printf("binary: %s", Integer.toBinaryString(10)); + } + + @Test + @Ignore + public void functionalScannerTest() { + Scanner scanner = new Scanner(System.in); // java.util.Scanner + System.out.println(scanner.nextLine()); // 문자열 입력 받기 + System.out.println(scanner.nextInt()); // 정수형 입력 받기 + } + + @Test + public void overflowTest() { + short sMin = -32768; // short는 2바이트로 최솟값 -32768을 가짐 + short sMax = 32767; // 최댓값 32767을 가짐 + + // Java는 연산시 피연산자를 4바이트로 변환하여 계산하기 때문에 short로 casting이 필요함 + assertEquals(sMax, (short) (sMin - 1)); + + char cMin = 0; // char는 문자형 타입이지만, 실제로는 아스키코드(정수형)를 저장하고 있다. + char cMax = 65535; // unsigned 2바이트이기 때문에 65535를 최댓값으로 가진다. + + // short와 마찬가지로 타입 캐스팅이 필요 + assertEquals(cMax, (char) (cMin - 1)); + + // 너무 큰 수는 오버플로우가 발생하여 원하는 값이 안나올 수 있다. + final int BIG_INTEGER = 100_000; + assertFalse(BIG_INTEGER * BIG_INTEGER / BIG_INTEGER == BIG_INTEGER); + } + + @Test + public void floatAndDoubleRangeTest() { + float f = 9.12345678901234567890f; // float를 선언할때는 f를 붙여야 함 + double d = 9.12345678901234567890; + System.out.printf("float: %f%n", f); // 7자리만 출력하고, 마지막 자리에서 반올림 + + // 전체 24자리에서 20자리는 소숫점을 표현 + System.out.printf("float: %24.20f%n", f); // 오버플로우 발생하여 7자리 뒤 나머지 자리는 예상하지 못한 값이 출력 + System.out.printf("double: %24.20f%n", d); // double은 8바이트로 오버플로우 발생하지 않음 + } +} Index: core-module/src/test/java/tutorial/Chapter03.java =================================================================== diff -u --- core-module/src/test/java/tutorial/Chapter03.java (revision 0) +++ core-module/src/test/java/tutorial/Chapter03.java (revision 1d7aa798a3c473a2b693be20036b8bcd75dbbcd2) @@ -0,0 +1,42 @@ +package tutorial; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.Before; + +public class Chapter03 { + + private String str1; + private String str2; + private String str3; + + @Before + public void setUpVariable() { + this.str1 = new String("hello"); + this.str2 = new String("hello"); + this.str3 = "hello"; // String은 예외로 new 를 생략할 수 있다 (편의성을 위해) + } + + @Test + public void compareStringValueTest() { + // String은 클래스(참조형)이기 때문에 자체는 주소값을 가짐 + assertFalse(str1 == str2); + + // String의 equals() 메소드를 이용하여 값 비교 + assertTrue(str1.equals(str2)); + } + + @Test + public void compareStringReferenceTest() { + // String은 문자열 배열과 같지만 추가적으로 기타 유용한 기능(메소드)이 들어간 클래스이다. + // String class = char array + util + String str = "Hello"; + assertTrue(str == str); // 당연히 같은 주소값을 가짐 + + // String 값을 변경하면, 값이 변경되는 것처럼 보이지만 실제로는 새로운 문자열을 반환한다 + String change_str = str + ", Java!"; + assertFalse(str == change_str); // 다른 주소값을 가짐 + } + +} Index: core-module/src/test/java/tutorial/Chapter05.java =================================================================== diff -u --- core-module/src/test/java/tutorial/Chapter05.java (revision 0) +++ core-module/src/test/java/tutorial/Chapter05.java (revision 1d7aa798a3c473a2b693be20036b8bcd75dbbcd2) @@ -0,0 +1,57 @@ +package tutorial; + +import org.junit.Before; +import org.junit.Test; + +public class Chapter05 { + private int[] scores; + private int[] sourceArray; + private int[] targetArray; + + @Before + public void setUpScores() { + this.scores = new int[5]; + for(int i=0; i