논리 연산자
단락 회로 평가 : 앞 항의 결과만 평과하고도 연산자의 결과를 알 수 있을 떄, 뒤 항의 결과를 평가하지 않는다.
조건 연산자
조건식 ? 결과1 : 결과2
조건식이 참이면 결과1, 거짓이면 결과2를 선택한다.
int 배열 생성시, 모든 인덱스 0으로 초기화
배열에 값을 넣으면서 생성하고 싶을 때는?
int[] scores = {90, 80, 77, 100, 95};
원소가 원시타입(int)인 경우 : 값을 그대로 저장하며, 메모리 크기가 4Byte로 고정되어 있다.
원소가 참조타입(String과 같은 객체)인 경우 : 값이 그대로 저장하는 것이 아니라, 객체의 주소를 저장한다.
행과 열을 가진 테이블 형태
사실상 이차원 배열이라는 개념은 물리적으로 존재하지 않는다.
→ 일차원 배열을 여러개 저장하는 배열이다.
이차원 배열 선언
데이터타입[][] 배열변수이름 = new 데이터타입[행의 크기][열의 크기];
열의 개수를 n개로 선언했다면, 모든 행의 열 개수가 n개로 고정되어있다.
== 첫 번째 행은 n개의 열을 가지고, 두 번째 행은 n-3개의 열을 가질 수 없다.
int[][] new scores = new int[ROW_NUM][COL_NUM];
위와 같이 scores라는 2차원 배열을 선언했을 때, scores[i].length() == COL_NUM이다.
배열 변수에는 첫번째 원소 주소만 저장된다.
첫번째 원소의 주소에서 인덱싱을 통해서 배열 내의 다른 원소에 접근 가능
자바의 경우에는 행 단위로 저장하는 row-major order를 따르고 있다. (정확하게 row-major는 아니지만, row-major의 형태로 저장되고 있다.)
열 단위로 데이터에 접근하는 것이 유리한 경우도 있다.
원소를 복사하는 것이 아니라, 주소가 복사되는 것을 주의해야 된다.
얕은 복사(Shallow Copy) : 주소가 복사되는 것.
깊은 복사(Deep Copy) : 원소가 복사되는 것.
참고 : https://velog.io/@db_jam/Java-얕은-복사Shallow-Copy와-깊은-복사Deep-Copy
정해져 있는 부서, 직급 등의 경우 상수값으로 만들어 클래스처럼 사용 가능하다.
public enum Department {
ADMIN("경영관리부서"), DEVELOP("개발부서"), RESEARCH("연구부서");
}
함수는 반환값을 가질 수 있는데, 반환값은 하나이거나 없다.
void
public static int a() {
}
public static int a(int x, int y) {
}
중복정의 - 함수의 이름은 같으나 매개변수에 따라 다른 함수가 호출되는 성질
보통 생성자에 오버로딩을 많이 한다.
가변인자
public static void main(String... args)
String 인자의 개수를 정해놓지 않고 받는다.
→ 인자의 개수를 알지 못할 때, 가변인자로 정의할 수 있다.
컴파일시에는 배열로 바뀌어 연산한다.
함수의 파라미터로 주소값을 전달하면 해당 함수를 통해서 원본의 값을 변경할 수 있다. (call by address)