자바 기초 여러가지 정리개발 공부/Java2022. 3. 27. 17:26
Table of Contents
개인적으로 맨날 쓰는데 맨날 헷갈리는 자바 기초 문법이나 특징 등등을 정리해봤습니다.
이 글은 제가 또 새롭게 헷갈리는 게 나오는 대로(?) 계속해서 업데이트할 예정입니다..😂
기본 자료형 vs 참조 자료형
- 기본 변수는 메모리에 값 자체를 저장하지만 참조 변수는 참조하는 객체의 주소를 메모리(변수)에 저장한다.
JAVA에서 char 크기
- c와 다르게 java에서는 char이 2byte로 저장된다.
서식 문자
- %d - 10진수
→ %Xd - 오른쪽 정렬 + 최소 X칸 만큼 공백 유지 - %o - 8진수
- %x - 16진수
- %f - 실수
→ %.Xf - 소수점 아래 X자리까지 출력 - %c, %s - 문자, 문자열
조건문 (삼항 연산자) 축약 표현
- 조건문 : true ? false
JAVA 배열의 특징
- 자바에서 배열[] 은 최초 선언 이후 크기 변경이 불가능
- 배열 변수 ex) arr_name은 데이터 자체가 아닌 데이터의 시작 주소를 저장. 데이터는 메모리의 별도 공간에 저장.
- 따라서 deep copy를 위해서는 Arrays.copyOf(원본배열, 배열길이)를 사용
- 배열의 출력을 위해서는 Arrays.toString(배열이름) 사용
- 단순히 배열을 출력하려고 하면 배열 변수의 레퍼런스(주소 값)을 출력
/*
* 배열 선언 및 초기화 방법
* 자료형[] 변수이름 = new 자료형[크기]
* 형태로 사용
*/
SIZE = 10;
// 선언 및 초기화
int[] arr_name = new int[SIZE];
int[] arr_name = {10, 20, 30, 40, ...} // 선언하면서 값 대입도 가능 (대괄호 사용)
//선언 후 초기화
int[] arr_name;
arr_name = new int[SIZE];
JAVA Switch문
- 각 case block에 break가 없으면 아래의 case block까지 이어서 실행함에 주의
switch (변수) {
case 조건1:
break;
case 조건2:
break;
...
default:
break;
}
오버로딩 vs 오버라이딩
- 오버로딩 : 같은 함수 이름을 갖지만 매개변수, 리턴타입 등의 특징은 다른 여러 개의 함수
- 오버라이딩 : 자신의 부모 클래스들 중 하나에 의해 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 재정의하는 것
Default Constructor (기본 생성자) ↔ 사용자 정의 생성자
- 디폴트 생성자는 파라미터 없이 객체 생성 시(가장 먼저 호출되는)에 호출되는 생성자를 말함
- 디폴트 생성자는 직접 정의하지 않으면 컴파일 시점에 컴파일러가 자동으로 생성
- 사용자 정의 생성자는 여러 파라미터를 사용해서 정의할 수 있다.
JAVA 소멸자와 GC 작동 시점
- System.gc(); 를 사용하면 GC가 최대한 빨리 작동하도록 명령할 수 있으나 바로 작동하는 것은 아니다.
→ 시스템이 알아서 시기를 판단하여 작동함 - 객체가 소멸될 때는 객체의 finalize() 함수가 호출됨
→ 일반적인 경우, 직접 명시할 필요는 없음 - "종료자는 사용하면 안 된다. 예측이 불가능하고 대체로 위험하고 일반적으로 필요하지 않다."
클래스 멤버 ↔ 인스턴스 멤버
- 클래스에 static 키워드를 사용하여 클래스 멤버 (메서드, 변수)를 지정할 수 있다.
- 클래스 멤버는 모든 인스턴스 간에 공유되며 컴파일 시에 메모리에 할당된다.
- 따라서, 계좌의 총액 등 전체 객체 간에 공유되어야 하는 값이나 객체 없이도 클래스에 저장되어야 하는 상수 값등을 설정할 때 활용할 수 있다.
- 클래스 멤버는 인스턴스에 의해 접근될 수 있지만 인스턴스 멤버는 클래스 멤버에 의해 접근될 수 없다.
- 클래스 — 접근 O —> 인스턴스
- 인스턴스 — 접근 X —> 클래스
getter, setter를 사용하는 이유
- 함수를 통해 멤버 변수를 변경하게 함으로써 예외적인 상황이 발생하지 않도록 조건문 등의 안전장치를 걸 수 있다.
List vs ArrayList
- List : 인터페이스
- ArrayList : List를 implements한 클래스
- ArrayList를 굳이 List<>로 선언하는 이유
- Generic의 이점(구현체가 상황에 맞게 변경될 수 있음)을 취하기 위함
추상 클래스, 추상 메소드
- 추상 메소드
- 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드
- 상속 받은 클래스에서 재정의하지 않으면 compile error 발생
- 아래와 같이 선언
abstract void doIt();
- 추상 클래스
- 추상 메소드를 하나 이상 가지고 있는 클래스
- 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해준다.
- 즉, 자식 클래스에서 반드시 사용 및 정의되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언하고 모아놓는 것
- 추상 클래스는 추상 메소드를 포함하므로 인스턴스의 생성이 불가능함
abstract class Foo { ... // 추상 메서드 abstract void doIt(); ... }
'개발 공부 > Java' 카테고리의 다른 글
자바 Collector 구조 (feat. groupingBy() 사용법) (0) | 2024.01.14 |
---|---|
형 변환 정리 (0) | 2022.05.17 |
내부 클래스에 static이 권장되는 이유 (0) | 2022.04.26 |
함수형 인터페이스와 람다식 (0) | 2022.04.26 |
ISP (인터페이스 분리 원칙) in 스프링 프레임워크 (0) | 2022.04.17 |
@gmelon :: gmelon's greenhouse
백엔드 개발을 공부하고 있습니다.