자바 중요 문법 빠르게 반복하는 스터디를 진행하게 됐다!! 👩💻
너무 감사하게도 팀장님이 자료 공유 + 강의까지 해주신다구 하셔서 이제 내가 해야할 건 열심히 공부하는 것 뿐 👽
기본 개념 다지기
기본형과 참조형
기본형 - Primitive Type
- boolean, char, byte, short, int, long, float, double
- 기본형 변수로, 실제로 직접 사용할 수 있는 값이다. (실제 값이 저장됨)
- null값이 존재하지 않는다.
- 기본값이 정해져 있기 때문!
primitive type 기본값 boolean false char '\u0000' byte 0 short 0 int 0 long 0L float 0.0F double 0.0
- 기본값이 정해져 있기 때문!
❓ primitive type에 null값, 아예 불가능할까?
- 아니다.
- Wrapper 클래스를 이용하면 null값을 넣는 것이 가능은 하다.
참조형 - Reference Type
- 기본형을 제외한 나머지 (String, Class, Interface, Enum, Array, Map, Set 등)
- 참조형 변수로, 객체의 참조값이 저장된다. (자료가 저장된 공간의 주소를 저장)
- 실제 값은 다른 곳에 있고, 해당 위치의 주소만을 가지고 있음. 주소를 참조하여 값을 가져옴.
- null값으로 초기화가 가능하다.
기본형 vs. 참조형
- 기본형이 참조형에 비해 접근 속도가 훨씬 빠르고, 메모리 양도 훨씬 적게 사용한다.
기본형과 참조형의 저장공간
기본형- 스택(stack) 에 기본형 변수가 저장됨
- 해당 변수 안에 실제 값이 저장됨
참조형- 스택(stack) 에 참조형 변수가 저장됨
- 해당 변수 안에 실제 객체의 주소값이 할당됨
- 힙(heap) 에 실제 객체가 저장됨int(기본형) vs. Integer(참조형)
- int : 기본형
- null 값 불가능
- 따로 직접 함수 적용 불가능
- Integer : Wrapper 클래스
- null 값 가능
- Integer 클래스에 정의된 함수 적용 가능
- ex) 2진수 변환 함수 - tobinaryString
Wrapper Class
- 기본형을 객체로 다루기 위해 사용하는 클래스
- 값을 포장하여 객체로 만드는 것
- java.lang 패키지에 포함됨
- 각 타입에 해당하는 데이터를 파라미터로 전달받아 해당 값을 가지는 객체로 만들어줌
필요한 경우
- null 값을 표현해야 할 때
- Collection Frame Work를 사용해야할 때
- 객체만 저장이 가능하기 때문
- 매개변수로 객체를 필요로 하는 상황
- 기본형 값이 아닌 객체로 저장 or 사용해야하는 상황
Boxing & UnBoxing
- Boxing(박싱) : primate type → Wrapper Class
- UnBoxing(언박싱) : Wrapper Class → Primate type
AutoBoxing & AutoUnBoxing
jdk 1.5 부터는 자바 컴파일러가 자동으로 박싱, 언박싱을 해준다.
/* 기존 박싱 & 언박싱 */
Integer num = new Integer(17); // 박싱
int n = num.intValue(); // 언박싱
/* 오토 박싱 & 언박싱 */
Integer num = 17; // new Integer() 생략
int n = num; // intValue() 생략
- new 키워드 없이도 자동으로 인스턴스를 생성할 수 있고, UnBoxing 메소드를 사용하지 않아도 자동언박싱을 통해 인스턴스에 저장된 값을 바로 참조할 수 있다.
== vs. .equals() vs. .compareTo()
==- 참조 비교, 즉 주소값을 비교한다.
- 같은 메모리 공간을 가리키는지 확인한다.
- 기본형, 객체 타입에 적용 가능
- 반환 타입 : boolean
- 참조 비교, 즉 주소값을 비교한다.
.equals()- 내용 비교
- 내부값을 비교한다.
- 문자열의 데이터/내용을 기반으로 비교
- 기본형에 적용 불가능, 객체 타입에 적용 가능
- 반환 타입 : boolean
- 내용 비교
.compareTo()- 기본형에 적용 불가능
- 반환 타입 : Integer
래퍼클래스 끼리의 비교
- == : 주소값 비교
- equals() : 내부값 비교
- 래퍼클래스와 기본형의 비교*
== : 내부값 비교
- equals() : 내부값 비교
생성자
기본 생성자
- 매개변수가 없는 생성자
- 자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다.
- if 클래스에 생성자가 하나도 없다면,
-> 자바 컴파일러가 기본 생성자를 자동으로 만들어줌 - if 생성자가 하나라도 있으면,
-> 자바는 기본 생성자를 만들지 않는다.
- if 클래스에 생성자가 하나도 없다면,
생성자 오버로딩
- 생성자는 매개변수만 달리하여 여러 생성자를 제공할 수 있다. (like 메서드 오버로딩!)
- 생성자를 오버로딩할 때,
this()를 이용한다.
this. vs. this()
this.
- 인스턴스자신을 가리키는 참조변수를 의미한다.
- (생성자의 매개변수로 선언된 변수의 이름) == (인스턴스 변수) 일 때, 두 변수의 구분을 위해 사용
this()
- 생성자 를 의미한다.
- 규칙
- 생성자 내부에서만 사용 가능
- 생성자 내부 중에서도 첫 줄에서만 사용 가능
class Car{
String color; // 인스턴스 변수
String gearType;
int door;
//this. 사용
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
//this() 사용
Car(){
this("white", "auto", 4);
}
//this() 사용
Car(String color){
this(color, "auto", 4);
}
}
패키지
import 클래스
- java.lang 패키지의 모든 클래스는 import 없이 사용 가능
- 클래스는 public이어야만 import가 가능하다.
클래스는 접근 제한자로 public과 default만 사용 가능하다.
패키지는 다르지만 클래스 이름이 같은 경우
- 클래스 이름이 동일하더라도, 패키지가 다르면 다른 클래스임!
- 같은 이름의 클래스가 있다면, import는 그중에 하나만 선택할 수 있다.
- 나머지 클래스는 패키지를 포함한 전체 경로를 적어주어야 한다.
패키지 이름 관례
- 모두 소문자로 사용한다.
- 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다.
- ex) com.company.myapp
Reference
'Java > 문법' 카테고리의 다른 글
| [JAVA 중급 스터디 - 3회차] 자바의 메모리 구조 (0) | 2024.03.09 |
|---|---|
| [JAVA 중급 스터디 - 2회차] 접근 제한자와 캡슐화 (0) | 2024.03.08 |
| [Java] 배열의 공통 원소 집합 구하기 (0) | 2024.03.02 |
| [Java 문법] Scanner보다 빠른 BufferedReader, StringTokenizer (0) | 2024.01.29 |
| [Java 문법 총정리] final (1) | 2024.01.27 |