자바에 대해 공부하고 정리한것 모음
- 0927까지 정리
서식
특수 문자
\t
: 탭
\n
: 줄 바꿈
\'
: 작은 따옴표
\"
: 큰 따옴표
\\
: 역슬래쉬
서식 문자
출력시 서식 문자를 이용 하여 간단하게 표현할 수 있다.
%d
: 10진수
%o
: 8진수
%x
: 16진수
%c
: 문자
%s
: 문자열
%f
: 실수
- ex
int num = 10;
System.out.printf("이런식 으로 사용 %d 하하",num);
연산자
산술연산자, 논리연산자, 삼항연산자, 비트연산자 등이 있다.
-
산술 연산자 ==, *, /, +, - == 연산자는 주소값을 비교 문자열 비교할 땐 equals() 사용하자
-
삼항연산자 : 조건식? 식1 : 식2 조건이 참이면 식1이 실행되고 조건이 거짓이면 식2가 실행된다.
int x = 10;
int y = 20;
int result = 0;
result = (x > y) ? 100 : 200;
System.out.println("result: " + result);
// result: 200
result = (x < y) ? 100 : 200;
System.out.println("result: " + result);
// result: 100
result = (x == y) ? 100 : 200;
System.out.println("result: " + result);
// result: 200
배열 과 List
배열 특징: 한번 선언할때 크기를 정해야하고 정하면 변경 불가능 arrayList : 크기를 계속 추가 할 수 있다. 메소드를 이용해 수정한다.
- 배열 선언 방법
int[] arr1 = new int[5];
arr[0] = 100;
arr[1] = 100;
arr[2] = 100;
arr[3] = 100;
arr[4] = 100;
System.out.println(Arrays.toString(arr1));
// 100,100,100,100,100
int[] arr2 = {10, 20, 30, 40, 50, 60}
- arrayList 선언 방법
ArrayList<> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(30);
System.out.println("출력:" + list.get(0));
// 출력: 10
문법
조건문
특정한 조건에 동작해야할 때 쓰는 구문
-
if
-
else if
- 코드를 작성할 때 else 은 될 수 있으면 줄이는게 낫다. 이유: 코드를 읽을 때 else 은 위에 if 까지 생각 해야함 짧으면 상관 없는데 길어지면 한번에 봐야할 줄이 길어짐
- swith
반복문
특정한 동작이 반복되어야할 때 쓰는 구문
- for
- for each 도 있다. 배열만큼 실행
@Test
public void foreachTest() {
int[] numbers = {1,2,3,4,5};
for (int number : numbers) {
System.out.println(number);
}
}
// 1,2,3,4,5 출력
- while
- while 은 ()가 만족해야 동작
int i = 0;
while(i < 10) {
System.out.println(i);
i++;
}
// 0,1,2,3,4,5,6,7,8,9 실행
- do{} while(false)
- while 조건에 맞게 do 실행
int i = 10;
do {
System.out.println(i);
} while (i < 13);
// 10, 11, 12 3번 출력
String 과 char
문자(char, Character)와 문자열(String)
- char : 문자 1개 ex) p, o, b, i
- String : 문자열 ex) pobi
StringBuilder
-
String + String vs StringBuilder String은 불변하기(immutable)이기 때문에 String과 String을 더하면 새로운 String 객체를 생성한다. 따라서 String과 String을 더하는 시점에 메모리 할당과 메모리 해제가 계속 발생한다.
-
StringBuilder는 String과 다르게 기존 데이터에 새로운 데이터를 더하는 방식을 취하기 때문에 속도가 더 빠르다. 따라서 긴 문자열을 더하는 상황이 발생하는 경우 StringBuilder를 활용해 구현한다.
-
String 은 더할 때 새로운 공간을 만들어 더한값을 만들고 StringBuilder 는 문자열에다 바로 더한다.
- StringBuffer 는 다수의 사용자의 접근을 막는다.
- 현업에서는 StringBuilder 더 자주 사용한다. 굳이 막을 필요가 없어서
List 와 ArrayList 차이
클래스를 생성할 때 도형 타입으로 생성하게 되면 정사각형이 아닌 다른 직사각형, 삼각형 등 도형 인터페이스를 구현한 클래스에서 사용 될 수 있다. 하지만 정사각형 클래스로 생성하게 되면 직사각형, 삼각형 등 에서는 사용할 수 없다.
도형에 비유하여 풀어보면,
-
List list = new ArrayList();
-
-> 도형 list = new 정사각형();
-
ArrayList list = new ArrayList();
-
-> 정사각형 list = new 정사각형();
(List는 interface다. interface는 공통되는 메소드를 추출해 놓은 클래스로 생각하면 된다.)
class 와 인스턴스
클래스 와 인스턴스(객체) 의 차이
-
클래스는 표현 대상의 특징에 대해 추상화 하여 서술 하는것을 말한다. -추상은 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 있도록 하는 기능
- 프로시져 추상화 : 함수
- 데이터 추상화 : 구조체, 배열, 포인터
-
인스턴스는 구체화 된 클래스라 생각하면 될듯하다.
-
static : 자바 언어 예약어로 클래스 메소드와 클래스 필드를 지정할 때 사용한다.
- static을 붙이면 클래스 전체에서 사용할 수 있다. (클래스 변수 클래스 메서드)
- 안 붙이면 인스턴스 내에서만 사용할 수 있다. (인스턴스 변수 인스턴스 메서드)
- 인스턴스 변수와 메서드는 인스턴스를 만든 후 에만 접근 가능.
- 클래스 변수와 메서드는 인스턴스를 만들지 않아도 접근 가능.
생성자
클래스를 생성할때 생성된다.
- 반환 타입이 없다.
- 클래스와 이름이 같다.
- 생성할때 파라미터를 강제할 수 있다.
- setter 를 안 쓸 수 있다. (생성자를 생성하면서 파라미터를 넣으면 그자체가 setter);
- this 현제 생성한 인스턴스 의 변수를 찾는다.
- test 코드는 src/test/ 안의 코드, prduction 코드는 실제 사용하는 코드
getter 와 setter
둘다 사용하는것을 자제 하자 왜냐 하면 객체 지향 설계는 객체를 메세지를 보내 동작 시키는것을 원칙으로 한다.
getter
객체의 값을 가져오는 것
- 사용 하는것
setter
객체의 변수를 변화 시키는 것
TDD 단위 테스트
언제 테스트를 작성하고 수행해야 하는지에 대한 절차이다.
-
단위 테스트(Unit testing) 단위 테스트는 일반적으로 모듈이나 객체를 구성하는 단일함수 정도의 크기에 해당하는 코드 단위에 집중한다. 단일 함수에 대한 구체적인 테스트는 테스트 자체를 단순화하고 빠르게 작성하여 수행해 볼 수 있다는 장점을 갖는다. 이를 통해 많은 수의 단위 테스트들을 빠르게 만들 수 있고 보다 많은 버그를 발견하여 잡아 낼 수 있다. 특히 단위 테스트는 코드를 변경하는 경우 많은 도움을 준다. 구현된 코드에 대한 단위 테스트들을 갖고 있다면 변경과 상관없는 구현코드들이 이상없이 동작할 수 있다는 신뢰를 갖고 마음 편하게 코드를 수정할 수 있다.
-
TDD는 다음의 절차로 구성된다.
- 테스트 코드를 작성한다.
- 작성한 테스트 코드와 기존에 작성된 다른 테스트들을 수행한다. 이 시점에서 새로 추가된 테스트 코드는 실패할 것이다. 만일 실패하지 않는다면 올바른 것을 테스트하고 있지 않은 것이므로 그 안에 버그가 있는 것이다.
- 실패한 테스트를 성공시키기 위한 최소한의 코드를 구현부에 작성한다.
- 실패한 테스트가 성공하는지 확인하기 위해 테스트를 재수행한다.
- 필요에 따라 작성한 코드를 리펙토링한다.
- 1번 부터 다시 반복한다.
객체 설계 팁들
- 상태를 가지는 객체의 데이터를 꺼내려(get)하지 말고 객체에 메시지를 보내라는 원칙에 따라 구현한다.