<연산자>
산술연산 : +(덧셈) -(뺄셈) *(곱셈) / (나눗셈) << , >> (비트연산자)
비교연산자 : <, >, <=, >=, ==, !=
논리연산자 : &&(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들만 빼서 배열로 리턴
'공부 > Java' 카테고리의 다른 글
Java - 오류 및 예외 처리 // 예외 클래스 구조 // 제네릭 문법 (0) | 2023.04.07 |
---|---|
Java 문법 (4) - 상속관련 super // override // 다형성 // 추상클래스 (0) | 2023.04.05 |
Java 문법 (3) - 생성자 // 제어자 // getter, setter // 상속 // 추상화 //인터페이스 // (0) | 2023.04.05 |
Java문법 (2) - 클래스 // 객체 // 메서드 (0) | 2023.04.05 |
Java 개요 // JVM // 저장공간 // 변수와 상수 // 형변환 (0) | 2023.04.03 |