<연산자> 

산술연산 : +(덧셈)   -(뺄셈)    *(곱셈)    / (나눗셈)      << ,  >> (비트연산자)

 

비교연산자 :   <,  >,  <=,  >=,   ==,    !=

 

논리연산자 :  &&(and) ,   ||(or),    !(not)

 

대입연산자 : =, ++, --

 

기타연산자: (type)(형 변환 연산자)   //   ? :  (삼항연산자)  //   instance of

 

연산자 우선순위 : 산술 -> 비교 -> 논리 -> 대입

 

피연산자 자동 형변환 : 타입이 다른 두 개의 연산을 진행할 때, 더 큰 type으로 맞춰주게됨

 

비트연산 : <<하면 왼쪽으로 자리수 옮기기 (0101 -> 1010) // >>는 오른쪽옮기기 (1010 -> 0101)

 

<switch - case문>

switch(month){

    case 1:

        monthString = "1월" ;

            break;

    case 2:

        monthString = "2월" ;

            break;

............

    defalut:

        monthString = "unknown";

}

 

swith안에 오는 연산자가 case (조건)일때, indentation 안의 코드를 실행한다.

각 case 안에 break가 있어야 switch문을 탈출할 수 있으며, case에 모두 해당되지 않을 때 실행할 default를 줘야한다.

if와 다르게 조건을 하나만 지정할 수 있다. 대신 가독성이 좋음

 

<반복문>

for문, while문, do-while문이 있다.

for문, while문은 C랑 문법 똑같음

iterable에서의 for문은

for (int num : number){ }와 같이 써주며, 이 때 콜론 오른쪽에는 배열이 오게됨.

 

=========do-while문=========

while문과 다르게, 작업을 먼저하고 조건을 비교

 

do{

    작업 ~~~

} while(조건);

 

<배열>

new 명령어를 통해서 생성

int[] arr = new int[8]

값을 주려면 {1,2,3} 이런식으로

int배열은 기본적으로 0, bool은 false, String은 null로 채워짐

 

======Arrays 유틸리티=====

Arrays.fill(intArr , 1)  : intArr의 값을 모두 1로 초기화

등등 좋은 메서드 많다.

 

<배열에서의 복사>

int[] arr1 = {a,b,c}   이런식으로 선언하면, arr1이라는 변수는 주소값만 담고있다.

따라서, int[] arr2 = arr1  과 같이 대입해주면, arr2는 arr1의 주소값을 담게되므로, arr2의 값을 수정하면 arr1도 수정됨.

이를 얕은복사라고 함(주소값을 복사)

 

값을 복사(깊은복사) 하고싶으면, for문으로 하나하나 element를 대입해주거나,

int[] arr2 = arr.clone(); 메서드를 사용  ==> arr과 같은 값, 다른 주소를 리턴. but, 2차원 이상 배열에서는 얕은복사됨

 

따라서, 완전히 깊은복사를 하고싶으면 Arrays 유틸리티의 copyOf(arr, arr.length) 메소드 사용

eg)

int[] a = {1,2,3,4};

int[] b = Arrays.copyOf(a, a.length);

 

<가변배열>

int [ ][ ] arr = new int[3][ ];

두번째 차원의 배열은 길이가 달라도 넣을 수 있음

 

<String 유용한 메소드>

str.length() // str.charAt(3)  // str.substring(0,3) // str.equals(str2) // str.toCharArray();

String(char[])  ==> String으로 바꿔줌

 

<Collection>

★컬렉션은 기본형 변수가 아닌 참조형 변수를 저장한다

 

배열만 사용했을때 아쉬운 부분들을 커버해줌

Collection에는 ArrayList, LinkedList Set, Stack, Queue, Map  있음

컬렉션의 기능 : 크기 자동조정 / 추가 / 수정 / 삭제 / 반복 / 순회 / 필터 / 포함확인 etc.....

 

-------List------- : 순서가 있는 데이터의 집합 (데이터의 중복 허용) ==> 배열과 비슷

변수의 타입을 명시할 때, 기본형이 아닌 그 Wrapper타입으로 명시해줌 (컬렉션은 참조형 변수만 담으니까)

 

1. ArrayList<Integer> intList = new ArrayList<Integer>();

intList.add(100)    intList.add(200)    intList.add(300)

intList.get(0)  ==> 100       intList.set(1,15)   ==>  intList의 두번째 요소가 15로 바뀜

intList.remove(0)   ==>  intList의 첫번째요소를 삭제     intList.clear()   ==>  intList의 값들을 모두 삭제

print(intList.toString());  ==>  intList의 요소들을 볼 수 있게 해줌 ?

 

2. LinkedList<Integer> linkedist = new LinkedList<Integer>();   ==> 값을 조회할때는 느리지만, 추가/삭제는 빠름

linkedList.add(index : 2, element : 4)  ==> linkedList의 2번인덱스에 4를 추가

linkedList.set(index : 1, element : 10)  ==> linkedList의 1번인덱스의 값을 10으로 바꿈

remove, clear 등 ArrayList와 메소드들은 비슷함

 

-------Stack------- : FILO(first in last out)  ==> 최근 저장한 데이터를 나열하거나, 데이터의 중복처리를 막고싶을때

Stack<Integer> intStack = new Stack<Integer>();   ==> 선언 및 생성

intStack.push(10)    ==> 스택에 10을 넣음

intStack.isEmpty()   ==>  비었으면 true, 아니면 false

intStack.pop()   ==>  stack의 맨 위에거 꺼내고, 그것을 return

intStack.peek() ==> 맨위에거 리턴해줌. 하지만, pop하진않음

intStack.size() ==> 크기 return

 

-------Queue-------FIFO(first in first out)   ==>   생성자가 없는 인터페이스 (new로 만들지 않음)

Queue<Integer> intQueue = new LinkedList<>();    ==> 생성자가 없기때문에 생성자있는애로 만들어줌

.add(10)  ==> Stack과 같음    .isEmpty()도,   .size()도 같다

intQueue.poll()  ==> Queue의 제일 아래 (먼저들어간) element를 빼주고, 이 값을 리턴

intQueue.peek() ==> 보기만 함. poll과 같은값이 return되지만, 이 값이 Queue에서 빠지지 않음

 

 

 

-------Set-------순서가 없는 데이터의 집합 (데이터 중복 X) ==> 순서가 보장되지 않지만, 중복X,  생성자 없음

*HashSet, TreeSet 등으로 응용해서 같이 사용 가능

Set<Integer> intSet = new HashSet<>();     ==>  Set은 생성자가 없기때문에, 생성자가 있는 HashSet으로 생성

                                                                                                                             ≫생성자는 별도로 공부

.add(10)  //  .contains(10)  //  .remove()     etc....

 

 

-------Map-------순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집합 ==> 파이썬의 dictionary와 비슷

★Key는 유니크한 값들

HashMap, TreeMap 등으로 활용가능

 

Map<String, Integer> intMap = new HashMap<>();

intMap.put('일', 11)    intMap.put('이', 22)     ==> .put('key', value) Set에 값을 넣어줌. 중복된 key에 대해서 덮어쓰기함

intMap.get('key')  ==> key값에 해당하는 value를 가져옴

intMap.keySet()  ==> Map에서 key만 빼서 배열로 리턴(Map을 순회해야할 때 for문에 활용)

======>  for (String key: intMap.keySet()) { }   이런식으로 활용

intMap.values()   ==>  Map에서 value들만 빼서 배열로 리턴

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts