Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added .idea/.gitignore
Empty file.
9 changes: 9 additions & 0 deletions .idea/2021-Java-Study-1.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 44 additions & 0 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

287 changes: 287 additions & 0 deletions 3주차과제/자바기초.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,287 @@
# 2021-java-study
2021 자바 스터디 3주차 과제

# 자바 기초

## 1. 프리미티브 타입과 레퍼런스 타입

### 1.1 프리미티브 타입(원시 타입)
- 8가지 기본형 타입
- 기본값이 있기 때문에 Null이 존재하지 않음
- Null을 넣고싶다면 래퍼클래스 사용
- 실제 값을 저장하므로 **스택 메모리**에 저장됨
- 담을 수 있는 크기를 벗어나면 컴파일 에러 발생
- 주로 문법상의 에러가 많음

|타입|설명|사이즈|값의 범위|기본값|
|----|------------|----|----------------------|-----|
|byte|부호있는정숫값|8bit|-128 ~ 127|0|
|short|부호있는정숫값|16bit|-32768 ~ 32767|0|
|int|부호있는정숫값|32bit|-2147483648 ~ 2147483647|0|
|long|부호있는정숫값|64bit|9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807|0|
|char|유니코드 문자|16bit| 0 ~ 65,535|'\u0000'|
|float|부동소수점수|32bit| (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값|0.0d|
|double|부동소수점수|64bit|(1.7 X 10-308) ~ (1.7 X 10308) 의 근사값|0.0d|
|boolean|논리값|1bit|false,true|false|
<br>



### 1.2 레퍼런스 타입(참조 타입)

- 기본형 타입 제외한 타입들이 모두 참조형 타입
- 빈 객체를 의미하는 Null 존재
- 값이 저장된 곳의 주소값을 저장하는 공간으로 **힙 메모리**에 저장됨
- 문법상으로는 에러가 없지만 실행 시킬때 에러가 나는 런타임 에러가 발생

|타입|예시|할당되는 메모리 크기|기본값|
|----|------------|----|-----|
|배열(Array)|int[]arr = new int[5];|4byte(객체의주소값)|Null|
|열거(Enumeration)| |4byte(객체의주소값)|Null|
|클래스(Class)|String str = "project";<br> Fruite apple = new Fruite();|4byte(객체의주소값)|Null|
|인터페이스(Interface)| |4byte(객체의주소값)|Null|

## 2. 리터럴
### 2.1 리터럴이란
| 프로그램에서 직접 표현한 값, 즉 소스코드에 고정된 값을 말함

### 2.2 리터럴의 종류
- 정수 리터럴
```
int a = 15; // 10진수 리터럴
int b = 015; // 8진수 리터럴 - 0으로 시작 -> 10진수 값으로 13
int c = 0x15; // 16진수 리터럴 - 0x로 시작 -> 10진수 값으로 21
int d = 0b0101; // 2진수 리터럴 - 0b로 시작 -> 10진수 값으로 5

long 타입 리터럴은 숫자 뒤에 L 또는 l을 붙여 표시
long e = 26L;
```
<br>

- 실수 리터럴
```
double f = 0.1234;
double g = 1234E-4; // 1234*10*(-4) 이므로 0.1234와 같다
```
```
float,double을 명시적으로 붙이기도 함
(float는 f를 꼭 붙여야하고, double은 생략가능)

float h = 0.1234f;
double i = .1234D;
```
<br>

- 문자 리터럴
```
단일 인용부호('')로 문자 표현

char a = 'S';
char b = "사";
char c = \uae00; //유니코드값, \u다음 4자리 16진수로
```
- 문자열 리터럴
```
기본타입이 아님, ("")로 문자열 표현
String lter = "JAVA";
lter + 26 = "lter26" //문자열 출력
```
<br>

- 논리 리터럴
```
boolean a = true;
boolean b = 10 > 0; //b 값 true
boolean c = 0; // C와 다르게 boolean타입으로 0,1을 거짓,참으로 사용X
```
```
int a = null; //에러

String str = null;
str = "JAVA";
```

## 3. 변수 선언 및 초기화
### 3.1 변수 선언
| 사용할 데이터를 저장하기 위해 메모리를 잡음
```
int number; //number 변수선언
double length; //length 변수선언
```
### 3.2 변수 초기화
| 변수를 사용하기 위해 값을 넣어주는 작업으로 초기화해주지 않으면 쓰레기 값이 들어가 에러가 발생할 수 있음

```
number = 5;
length = 3.4;
```

### 3.3 변수 선언 + 초기화
| 변수 선언과 초기화를 동시에 할 수 있음
```
int number = 5;
int length = 3.4;
```

## 4. 변수의 스코프와 라이프타임

### 4.1 변수의 스코프
| 변수의 사용범위를 뜻함
```
public class Test {

int var1;

void pro(){

int var2;


}

}
```

- var1의 스코프는 클래스 전체이다. 즉 pro()메소드에도 사용 가능
- var2의 스코프는 pro()메소드 안이다. 즉 pro()밖에서는 사용 할 수 없음

### 4.2 변수의 라이프타임
| 변수가 생성되고 소멸하는 것을 말함
```
public class Test {

int var1; // var1: 인스턴스 변수,필드,전역변수
static int var2; // var2: 클래스 변수,정적 변수
void pro(int var3){ // var3: 매개변수,파라미터

int var4 = 100; //var4: 지역변수,local,변수

}

}
```
- var1은 객체가 생성될 때, 변수가 생성됨. 즉, 현재 Test클래스를 main메소드나 다른 클래스에서 인스턴스를 생성할 때 생성
- 인스턴스는 참조가 없을 때 Garbage Collector가 객체를 지워버리는데, 이때 인스턴스 변수도 같이 소멸
- var2는 클래스가 처음 호출되면서 생성되고, 자바 어플리케이션이 종료될 때 같이 소멸
- var3은 pro()메소드가 호출 될 때 var3이 생성되고, pro() 메소드의 종료 시점에 소멸
- var4는 '{'가 시작될 때 생성되고, '}'가 끝날때 소멸

## 5. 타입 변환, 캐스팅 그리고 타입 프로모션

### 5.1 타입 형변환
| 변수나 상수의 타입을 다른 타입으로 변환

byte < short < int < long < float < double < String

<----정수형 변수----> <-실수형 변수->

### 5.2 캐스팅
| 명시적 형 변환 - 큰 데이터 타입에서 작은 데이터 타입으로 형 변환
```
float a = 10;
int b = a;
```
- int형 변수에 float형 변수를 넣으면 오류가 발생

```
float a = 10;
int b = (int) a;
```
- 이와 같이 명시적으로 입력을 해줘야 함
- 값을 출력하면 실수형 10.0이 정수형 10으로 변환 됨
<br>

### 5.3 타입 프로모션
| 자동/묵시적 형 변환 - 작은 데이터 타입에서 큰 데이터 타입으로 형 변환

```
int a = 10;
float b = a;
```
- float형 변수에 int형 데이터를 넣는데, int형 변수는 float형 변수보다 작다고 정의되므로 자동으로 float형 변수로 변환되어 대입
- 값을 출력하면 정수형 10이 실수형 10.0으로 자동 변환 됨

## 6. 1차 및 2차 배열 선언
### 6.1 1차원 배열
| 같은 종류의 데이터를 그룹화 한 형태
```
int []a = new int[3]; // a는 3칸짜리 배열
int []a = {10,20,30}; // a[0]:10,a[1]:20,a[2]:30
```
- 배열의 크기만 정한 후 원소를 대입하지 않으면 초기값이 자동 할당
1. 숫자형 - 0으로 초기화
2. boolean형 - false로 초기화
3. String형 - null로 초기화

### 6.2 2차원 배열
| 1차원 배열에 행의 개념을 추가한 배열
```
int[][]arr = new int[2][3]; // 2행 3열
int[][]arr = {{1,2,3},{10,20,30}};
```

## 7. 타입 추론, var
| 코드 작성 당시 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것

### 7.1 Var
- Java 10 이상에서 추가됨
- 지역변수이며 선언과 동시에 초기화가 필수적

```
//Java 9 이하
String str = "Hello";

//Java 10 이상
var str = "Hello I am SooYeon";
-> 컴파일러가 오른쪽에 초기화 값으로 제공되는 것을 통해 타입 유추
```

### 7.2 Generics
- 주로 자바 컬렉션에서 사용
- 컬렉션에는 어떤 자료를 담을 지 알 수 없으므로 최상위 객체인 Object형태로 저장되고 관리되도록 설계
- 프로그래머가 원하는 객체 타입을 명시해 의도하지 않은 객체는 저장될 수 없도록 컴파일시에 오류 확인 가능

#### 7.2.1 Generic 클래스 정의
| 클래스 명 뒤에 <제너릭타입,...> 덧붙임
```
public class Test<T> {

private T t;

public void add(T t) {

this.t = t;

}

}
```
#### 7.2.2 Generic 클래스 선언과 생성
| 클래스명 뒤에 <제너릭타입> 덧붙임
```
Test<Integer> integerTest;

integerTest = new Test<Integer>();
```

### 7.2.3 Generic 타입에 사용되는 파라미터
| 타입 매개변수는 하나의 대문자 사용
```
E - Element

K - Key

N - Number

T - Type

V - Value

S,U,V etc. - 2nd, 3rd, 4th types
```






Loading