From 9ebf5f6f75745aaf9362b88932c905e957785e6d Mon Sep 17 00:00:00 2001 From: dbswl067 <76262688+dbswl067@users.noreply.github.com> Date: Sun, 17 Jan 2021 04:15:21 +0900 Subject: [PATCH 1/4] feat: 3week --- .../README.md" | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 "3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" diff --git "a/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" "b/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" new file mode 100644 index 00000000..cc4ddd18 --- /dev/null +++ "b/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" @@ -0,0 +1,98 @@ +# 1. 자바 코드 실습 + +## 자바 코딩 규칙(Java Code Convention) + +### 1. 파일 확장자 +|파일 형태|확장자| +|:---:|:---:| +|자바 소스|.java| +|자바 바이트코드|.class| + +### 2. 파일 구조 +- 파일은 빈 줄이나 다른 구역임을 나타내는 주석으로 나누어지는 여러 구역들로 구성되어 있다. +- 2,000 라인을 넘는 파일은 이해하기가 쉽지 않기 때문에 될 수 있으면 피해야 한다. + +### 2-1. 각각의 자바 소스 파일은 하나의 public클래스 또는 인터페이스를 가진다. private 클래스들과 인터페이스들이 +public 클래스와 연결되어 있을 때, public 클래스와 같은 파일에 private 클래스들과 인터페이스들을 넣을 수 있다. 그렇기에 +public 클래스는 파일에서 첫 번째 클래스 또는 인터페이스이어야 한다. + +- 시작 주석 : 모든 소스 파일은 클래스 이름, 버전 정보, 날짜, 저작권 주의를 보여주는 C 스타일의 주석과 함께 시작한다. +``` +/* +* 클래스 이름 +* +* 버전 정보 +* +* 날짜 +* +* 저작권 주의 +*/ +``` + +- Package문과 Import문 : 대부분의 자바 소스 파일에서 주석이 아닌 첫 번재 줄은 Package문이다. 그 후에 Import문이 뒤따라 나온다. +``` +package java.awt; +import java.awt.peer.CanvasPeer; +``` + +### 3. 들여쓰기 +4개의 빈 칸(space)를 들여쓰기 단위로 사용한다. 들여쓰기의 정확한 구현은 정해져 있지 않다. + +### 3-1. 한줄의 길이 +한 줄에 80자 이상 쓰는 것은 대부분의 터미널과 툴에서 다룰 수 없기 때문에 피해야 한다. + +### 3-2. 줄 나누기 +하나의 식이 한 줄에 들어가지 않을 경우, 다음과 같은 일반적인 원칙들을 따라서 두 줄로 나눈다. +- 콤마 후에 두 줄로 나눈다. +- 연산자 앞에서 두 줄로 나눈다. +- 레벨이 낮은 원칙보다는 레벨리 높은 원칙에 따라 두 줄로 나눈다. +- 앞줄과 같은 레벨의 식이 시작되는 새로운 줄은 앞줄과 들여쓰기를 일치시킨다. +- 만약 위의 원칙들이 코드를 더 복잡하게 하거나 오른쪽 끝을 넘어간다면, 대신에 8개의 빈 칸을 사용해 들여쓴다. + +### 4. 주석 +주석은 코드에 대한 개요와 코드 자체만 가지고는 알 수 없는 추가적인 정보들을 제공하기 위해 사용되어야 한다. +중요하거나 코드만으로는 명확하지않은 프로그램 설계에 대한 추가 설명을 포함하는 것은 적절하지만, 코드 상에 +이미 표현되어 있는 중복 정보는 피해야 한다. + +### 4-1. 구현주석 +구현 주석을 /*...*/과 //에 의해서 경계가 결정되는 C++에서의 주석과 동일하다. 또한 구현 주석은 각각의 +구현에 대한 추가적인 설명이 필요할 때, 또는 코드를 주석 처리할 때 사용할 수 있다. +프로그램은 다음과 같은 4가지 형식의 구현 주석을 포함할 수 있다. +- 블록 주석 : 파일, 메서드, 자료구조, 알고리즘에 대한 설명을 제공할 때 사용한다. +- 한 줄 주석 : 짧은 주석은 뒤따라 오는 코드와 같은 동일한 들여쓰기를 하는 한 줄로 작성할 수 있다. +- 꼬리 주석 : 아주 짧은 주석이 필요한 경우 주석이 설명하는 코드와 같은 줄에 작성한다. +- 줄 끝 주석 : 주석 기호 //는 한 줄 모두를 주석처리하거나 한 줄의 일부분을 주석 처리해야 할 때 사용할 수 있다. + +### 4-2. 문서화 주석 +문서화 주석은 단지 자바에서만 사용되며, /**...*/에 의해서 경계가 결정된다. +자바 소프트웨어에 포함되어 있는 javadoc 툴을 사용하면 문서화 주석을 포함하는 HTML +파일을 자동으로 만들 수 있다. 또한 문서화 주석은 소스 코드가 없는 개발자들도 읽고 +이해할 수 있도록, 실제 구현된 코드와는 상관이 없는 코드의 명세 사항을 포함한다. + +### 5. 선언 +한 줄에 하나의 선언문을 쓰는 것이 주석문 쓰는 것을 쉽게 해주기 때문에 한 줄에 하나의 선언문을 쓰는 것이 좋다. +```java +//good! +int level; +int size; + +//bad! +int level, size; +``` + +같은 줄에 서로 다른 타입을 선언하면 안 된다. +```java +int foo, fooarray[]; +``` + +### 5-1. 초기화 +지역 변수의 경우, 지역 변수를 선언할 때 초기화 하는 것이 좋다. 변수의 초기화 값이 다른 계산에 의해서 +결정되는 경우라면, 변수를 선언할 때 초기화 하지 않아도 괜찮다. + +### 5-2. 배치 +선언은 블록의 시작에 위치해야 한다. 이러한 경우 부주의한 프로그래머들은 혼돈에 빠질 수 있고, +영역 내에서 코드를 이동해야 하는 경우에 문제를 야기시킬 수 있다. 단, for문에서 선언하는 반복문을 위한 인덱스는 예외. + +### 5-3. 클래스와 인터페이스의 선언 +- 메서드 이름과 그 메서드의 파라미터 리스트의 시작인 괄호 "(" 사이에는 빈 공간이 없어야 한다. +- \ No newline at end of file From c63af5dcb344aa1822d2c7a4c42ea48d17acccff Mon Sep 17 00:00:00 2001 From: dbswl067 <76262688+dbswl067@users.noreply.github.com> Date: Sun, 17 Jan 2021 18:54:18 +0900 Subject: [PATCH 2/4] =?UTF-8?q?update:=20=EC=9E=90=EB=B0=94=20=EC=BD=94?= =?UTF-8?q?=EB=94=A9=20=EA=B7=9C=EC=B9=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 186 +++++++++++++++++- 1 file changed, 184 insertions(+), 2 deletions(-) diff --git "a/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" "b/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" index cc4ddd18..71efdd2e 100644 --- "a/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" +++ "b/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" @@ -12,7 +12,8 @@ - 파일은 빈 줄이나 다른 구역임을 나타내는 주석으로 나누어지는 여러 구역들로 구성되어 있다. - 2,000 라인을 넘는 파일은 이해하기가 쉽지 않기 때문에 될 수 있으면 피해야 한다. -### 2-1. 각각의 자바 소스 파일은 하나의 public클래스 또는 인터페이스를 가진다. private 클래스들과 인터페이스들이 +### 2-1. 자바 소스 파일 +각각의 자바 소스 파일은 하나의 public클래스 또는 인터페이스를 가진다. private 클래스들과 인터페이스들이 public 클래스와 연결되어 있을 때, public 클래스와 같은 파일에 private 클래스들과 인터페이스들을 넣을 수 있다. 그렇기에 public 클래스는 파일에서 첫 번째 클래스 또는 인터페이스이어야 한다. @@ -95,4 +96,185 @@ int foo, fooarray[]; ### 5-3. 클래스와 인터페이스의 선언 - 메서드 이름과 그 메서드의 파라미터 리스트의 시작인 괄호 "(" 사이에는 빈 공간이 없어야 한다. -- \ No newline at end of file +- 여는 중괄호 "{" 는 클래스/인터페이스/메서드 선언과 동일한 줄의 끝에 사용한다. +- 닫는 중괄호 "}"는 여는 중괄호 "{" 후에 바로 나와야 하는 null문의 경우를 제외하고는, 여는 문장과 동일한 들여쓰기를 +하는 새로운 줄에서 사용한다. +- 메서드들을 구분하기 위해서 각 메서드들 사이에는 한 줄을 비우도록 한다. + +### 6. 문 +### 6-1. 간단한 문 +각각의 줄에는 최대한 하나의 문만 사용하도록 한다. + +### 6-2. 복합문은 중괄호 "{statements}"로 둘러싸여진 문들의 리스트를 포함하는 문이다. 이 리스트에 포함될 수 있는 문들은 +다음 절에서부터 하나 하나 예를 들어 설명한다. +- 둘러싸여진 문들은 복합문보다 한 단계 더 들여쓰기를 한다. +- 여는 중괄호 "{"는 복합문을 시작하는 줄의 마지막에 위치해야 한다. +- 닫는 중괄호 "}"는 새로운 줄에 써야하고, 복합문의 시작과 같은 들여쓰기를 한다. +- 중괄호들이 if-else 문이나 for문 같은 제어 구조의 일부분으로 사용되어질 때에는 중괄호들이 모든 문들을 +둘러싸는데 사용되어져야 한다. + +### 6-3. return문 +값을 반환하는 return문은 특별한 방법으로 더 확실한 return값을 표현하는 경우를 제외하고는 괄호를 사용하지 않는 것이 좋다. + +### 6-4. if, if-else, if else-if else문 +if-else문을 사용할 때는 다음과 같이 작성한다. +```java +if (condition){ + statements; +} + +if (condition){ + statements; +} else { + statements; +} + +if (condition) { + statements; +} else if (condition) { + statements; +} +``` + +### 6-5. for문 +```java +for (initialization; condition; update) { + statements; +} +``` + +### 6-6. while문 +```java +while (condition) { + statements; +} +``` + +### 7. 빈 공간 +### 7-1. 한 줄 띄우기 +한 줄을 띄우고 코드를 작성하면, 논리적으로 관계가 있는 코드들을 쉽게 구분할 수 있기 때문에 +코드의 가독성을 향상시킨다. +다음과 같은 경우에는 한 줄을 띄어서 코드를 작성한다. +- 메서드들 사이에서 +- 메서드 안에서의 지역 변수와 그 메서드의 첫 번째 문장 사이에서 +- 블록 주석 또는 한 줄 주석 이전에 +- 가독성을 향상시키기 위한 메서드 내부의 논리적인 섹션들 사이에 + +다음과 같은 경우에는 두 줄의 띄어서 코드를 작성한다. +- 소스 파일의 섹션들 사이에서 +- 클래스와 인터페이스의 정의 사이에서 + +### 7-2. 공백 +- 괄호와 함께 나타나는 키워드는 공백으로 나누어야 한다. +- 메서드 이름과 메서드의 여는 괄호 사이에 공백이 사용되어서는 안 된다. 이유는 메서드 호출과 키워드를 구별하는데 도움을 주기 때문이다. +- 공백은 인자 리스트에서 콤마 이후에 나타나야 한다. +- .을 제외한 모든 이항 연산자는 연산수들과는 공백으로 분리되어져야 한다. 공백은 단항 연산자의 경우에는 사용해서는 안 된다. +- for문에서 사용하는 세 개의 식들은 공백으로 구분해서 나누어야 한다. +- 변수의 타입을 변환하는 캐스트의 경우에는 공백으로 구분해야 한다. + +### 8. 명명 규칙 +명명 규칙, 즉 이름을 정하는 규칙은 프로그램을 더 읽기 쉽게 만들어 줌으로써 더 이해하기 쉽게 만들어 준다. +또한 식별자를 통해서 기능에 대한 정보도 얻을 수 있다. + +### 8-1. Packages +- 패키지 이름의 최상위 레벨은 항상 ASCII 문자에 포함되어 있는 소문자로 쓰고, 가장 높은 레벨의 도메인 이름 중 하나이어야 한다. +- 현재는 com, edu, gov, mil, net, org 또는 1981년 ISO Standard316에 명시된 영어 두 문자로 표현되는 나라 구별 코드가 사용된다. +- 패키지 이름의 나머지 부분은 조직 내부의 명명 규칙을 따르면 된다. 이러한 규칙을 따라 만들어진 이름은 디렉토리 구조에서 디렉토리 이름으로도 사용된다. +- 예를 들면 부서명, 팀명, 프로젝트명, 컴퓨터 이름, 또는 로그인 이름 등이다. +```java +com.sun.eng +com.apple.quicktime.v2 +edu.cmu.cs.bovik.cheese +``` + +### 8-2. Classes +- 클래스 이름은 명사이어야 하며, 복합 단어일 경우 각 단어의 첫 글자는 대문자이어야 한다. +- 클래스 이름은 간단하고 명시적으로 작성해야 한다. +- 완전한 단어를 사용하고 두 문자어와 약어는 피하도록 한다 +```java +class Raster; +class ImageSprite; +``` + +### 8-3. Interfaces +- 인터페이스 이름도 클래스 이름과 같은 대문자 사용 규칙을 적용해야 한다. +```java +interface RasterDelegate +interface Storing; +``` + +### 8-4. Methods +- 메서드의 이름은 동사이어야 하며, 복합 단어일 경우 첫 단어는 소문자로 시작하고 그 이후에 나오는 단어의 첫 문자는 대문자로 사용해야 한다. +```java +run(); +runFast(); +getBackground(); +``` + +### 8-5. Variables +- 변수 이름의 첫 번째 문자는 소문자로 시작하고, 각각의 내부 단어의 첫 번째 문자는 대문자로 시작해야 한다. +- 변수 이름이 언더바 또는 달러 표시 문자로 시작하는 것이 허용되기는 하지만, 이 문자들로 시작하지 않도록 주의한다. +- 이름은 짧지만 의미 있어야 한다. +- 이름의 선택은 그 변수의 사용 의도를 알아낼 수 있도록 의미적이어야 한다. +- 한 문자로만 이루어진 변수 이름은 암시적으로만 사용하고 버릴 뼌수일 경우를 제외하고는 피해야 한다. +- 보통의 임시 변수들의 이름은 integer일 경우에는 i,j,k,m,n을 사용하고, character일 경우에는 c,d,e를 사용한다. +```java +int i; +char c; +float myWidth; +``` + +### 8-6. Constants +- 클래스 상수로 선언된 변수들과 ANSI 상수들의 이름은 모두 대문자로 쓰고 각각의 단어는 언더바로 분리해야 한다. +- 디버깅을 쉽게 하기 위해서 ANSI 상수들의 사용은 자제하도록 한다. +```java +static final int MIN_WIDTH=4; +static final int MAX_WIDTH=999; +static final int GET_THE_CPU=1; +``` + +### 9. 좋은 프로그래밍 습관 +### 9-1. 인스턴스 변수와 클래스 변수를 외부에 노출하지 말고 대신 접근을 제공 +인스턴스 변수 또는 클래스 변수를 합당한 이유없이 public으로 선언하지 말자. 인스턴스 변수들은 명시적으로 선언될 필요가 없는 경우가 많다. + +### 9-2. 클래스 변수와 클래스 메서드는 클래스 이름을 사용하여 호출 +클래스 변수 또는 클래스 메서드를 호출하기 위해서 객체를 사용하는 것을 피해야 한다. 대신에 클래스 이름을 사용한다. +```java +classMethod(); //좋은 사용법 +AClass.classMethod(); //좋은 사용법 +anObject.classMethod(); //나쁜 사용법 +``` + +### 9-3. 숫자는 바로 사용하지 않고 선언해서 변수 이름으로 접근 +숫자 상수는 카운트 값으로 for루프에 나타나는 -1,0,1을 제외하고는 숫자 자체를 코드에 사용하지 않는다. + +### 9-4. 변수에 값을 할당할 때 주의할 것들 +- 하나의 문에서 같은 값을 여러 개의 변수들에 할당하지 않는다. +- 실행 시 성능 향상을 위해서 할당문 안에 또 다른 할당문을 사용하지 않는다. + +### 9-5. 괄호 +연산자 우선순위 문제를 피하기 위해서 복합 연산자를 포함하는 경우에는 자유롭게 괄호를 사용하는 것이 좋은 생각이다. +```java +if (a == b && c == d) //bad! +if ((a == b) && (c == d)) //good! +``` + +### 9-6. 반환 값 +프로그램의 구조와 목적이 일치해야 한다. +```java +//bad! +if (booleanExpression) { + return true; +} else { + return false; +} + +//good! +return booleanExpression; +``` + +### 9-7. 조건 연산자 '?'이전에 나오는 식 +삼항 연산자에서 ? 이전에 이항 연산자를 포함하는 식이 있는 경우에는, 꼭 괄호를 사용해야 한다. +```java +(x >= 0) ? x : -x; +``` \ No newline at end of file From 45faf1f92233b9d5352d0d8b59e137b21994a06f Mon Sep 17 00:00:00 2001 From: dbswl067 <76262688+dbswl067@users.noreply.github.com> Date: Sun, 17 Jan 2021 18:59:09 +0900 Subject: [PATCH 3/4] fix: title --- ...\260\224 \354\275\224\353\223\234 \354\213\244\354\212\265.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" => "3\354\243\274\354\260\250 \352\263\274\354\240\234/1. \354\236\220\353\260\224 \354\275\224\353\223\234 \354\213\244\354\212\265.md" (100%) diff --git "a/3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" "b/3\354\243\274\354\260\250 \352\263\274\354\240\234/1. \354\236\220\353\260\224 \354\275\224\353\223\234 \354\213\244\354\212\265.md" similarity index 100% rename from "3\354\243\274\354\260\250 \352\263\274\354\240\234/README.md" rename to "3\354\243\274\354\260\250 \352\263\274\354\240\234/1. \354\236\220\353\260\224 \354\275\224\353\223\234 \354\213\244\354\212\265.md" From 332ffe3e10b1fcfd4f9a1c68213f00aa6a8373b6 Mon Sep 17 00:00:00 2001 From: dbswl067 <76262688+dbswl067@users.noreply.github.com> Date: Sun, 17 Jan 2021 21:53:21 +0900 Subject: [PATCH 4/4] =?UTF-8?q?add:=20=EC=9E=90=EB=B0=94=20=EA=B8=B0?= =?UTF-8?q?=EC=B4=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\353\260\224 \352\270\260\354\264\210.md" | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 "3\354\243\274\354\260\250 \352\263\274\354\240\234/2. \354\236\220\353\260\224 \352\270\260\354\264\210.md" diff --git "a/3\354\243\274\354\260\250 \352\263\274\354\240\234/2. \354\236\220\353\260\224 \352\270\260\354\264\210.md" "b/3\354\243\274\354\260\250 \352\263\274\354\240\234/2. \354\236\220\353\260\224 \352\270\260\354\264\210.md" new file mode 100644 index 00000000..288ba465 --- /dev/null +++ "b/3\354\243\274\354\260\250 \352\263\274\354\240\234/2. \354\236\220\353\260\224 \352\270\260\354\264\210.md" @@ -0,0 +1,115 @@ +# 2. 자바 기초 +## 프리미티브 타입 종류와 값의 범위 그리고 기본 값 +Java는 8가지의 primitive type이 있다. +- Boolean Type +- Character Type +- Four Integer Type +- Two floating-point types + +|타입|할당되는 메모리 크기|기본값|데이터의 표현 범위| +|:---:|:---:|:---:|:---:| +|boolean|1byte|false|true, false| +|char|2byte|'\u0000'|'\u0000' ~ '\uffff' (0 ~ 65535)| +|byte|1byte|0|-128 ~ 127| +|short|2byte|0|-32768 ~ 32767| +|int|4byte|0|-2147483648 ~ 2147483647| +|long|8byte|0L|-9223372036854775808 ~ 9223372036854775807| +|float|4byte|0.0F|1.4E-45 ~ 3.4E38 (1.4 x 10^-45 ~ 3.4 x 10^38)| +|double|8byte|0.0|4.9E-324 ~ 1.8E308 (4.9 x 10^-324 ~ 1.8 x 10^308)| + +## 프리미티브 타입과 레퍼런스 타입 +### Reference Types이란? +- 대표적인 References Types은 Classes와 array를 말한다. +- object는 reference type의 instance다. + +### Primitive Types과 Reference Types 차이 +- 8가지의 Primitive Types은 Java Language에 의해 정의된다. 프로그래머에 의해 새롭게 정의될 수 없다. +하지만 Reference Types은 사용자가 정의할 수 있다. +- Primitive Types은 single values만 가질 수 있는 반면 Reference Types은 더 많은 primitive type이나 objects의 타입을 가질 수 있다. + +## 리터럴 +- 자바의 리터럴은 Java Source 코드에서 상수형태로 표현되며 Integer, floating-point numbers, +single characters, string, true, false, null을 포함하는 모든 값을 말한다. +- 리터럴을 표현하는 syntax로는 numeric, character and string으로 표현될 수 있다. + +## 변수 선언 및 초기화하는 방법 +- 선언이란 +자바의 변수 선언이란 변수의 식별자 이름을 입력하고 변수의 메모리 공간을 할당하겠다라는 의미이다. +``` +char a; +``` +- 초기화란 +변수를 초기화 한다는 건 변수를 선언한 후 그 변수에 처음으로 어떠한 값을 저장하는 걸 말한다. +인스턴스를 생성할 땐 변수를 초기화 하지 않아도 기본 값이 세팅되지만 지역변수의 경우엔 초기화를 항상 해줘야 한다. + +- 초기화 하는 방법 +명시적 초기화란 변수의 생성과 동시에 초기화 하는 방법을 말한다. +``` +int a = 10; //명시적 초기화 방법 +``` +이 외에도 생성자를 통해 인스턴스의 변수를 초기화 하는 생성자 초기화 방법과 +명시적 초기화 방법으로는 복잡한 경우에 사용되는 초기화 블럭 방법이 있다. 이는 명시적 +초기화 방법에서는 할 수 없는 조건문과 반복문을 통해서 초기화가 가능하다. + +## 변수의 스코프와 라이프타임 +- 변수의 스코프란 변수에 대한 접근과 존재할 수 있는 영역을 의미한다. +- 자바에서 스코프에 따른 변수의 종류에는 클래스 변수, 인스턴스 변수, 지역변수 3가지로 나눌 수 있다. +- 변수의 종류는 변수가 선언된 위치에 따라 결정된다. + +|변수의 종류|선언 위치|초기화 시점|변수의 스코프|라이프타임| +|:---:|:---:|:---:|:---:|:---:| +|클래스 변수|클래스 영역|클래스가 처음 로딩될 때|클래스 전역|프로그램 종료 시까지| +|인스턴스 변수|클래스 영역|인스턴스가 생성될 때|각각의 인스턴스|객체가 메모리에 존재하는 동안| +|지역 변수|메서드 영역|변수 선언문이 수행됐을 때|메서드 안|메서드 수행 완료 시까지| + +## 타입 변환, 캐스팅 그리고 타입 프로모션 +### 타입 변환 +- 형변환이란 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다. +프로그램에서 값의 대입이나 연산을 수행할 때는 같은 타입끼리만 가능하기 때문에 연산을 수행하기 전에 +같은 타입으로 만들어야 하고, 변수나 상수를 다른 타입으로 변환하는 것을 '형변환'이라고 한다. +- 큰 데이터의 타입에서 작은 데이터의 타입으로 바꿀 때 Type Casting이라고 한다. +- 이때는 명시적으로 보여줘야 한다. + +### 타입 프로모션 +- 타입의 사이즈 크기가 더 작은 타입을 더 큰 타입에 대입할 때, 자동으로 작은 타입이 큰 타입으로 변환되는 현상을 말한다. + +## 1차 및 2차 배열 선언하기 +- 크기 할당과 초기화 없이 배열 참조변수만 선언하는 경우 +```java +int arr[]; +int []arr; +``` +- 선언과 동시에 배열 크기를 선언하는 경우 +```java +int arr[] = new int[5]; +``` +- 기존 배열의 참조 변수에 초기화 하는 경우 +```java +int[] arr; +arr = new int[5]; +``` +- 선언과 동시에 배열의 크기 지정 및 초기화 하는 경우 +```java +int[] arr = new int[4][3]; +``` +- 2차원 배열 선언 +```java +int[][] arr = new int[4][3]; +int[][] arr = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}}; +``` + +## 타입 추론, var +### 타입 추론 +타입 추론이란 코드 작성 당시 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것이다. + +### var +- 자바 10부터 타입 추론을 지원하는 var키워드가 추가되었는데 이 키워드는 local variable이면서 +선언과 동시에 initializer가 필수적으로 요구된다. +- 자바 7에서 다이아몬드 연산자라는 방식이 추가되었는데, 자바 10에서 나온 var와 함께 사용하게 되면 컴파일 에러가 발생한다. +```java +//컴파일러가 타입을 유추할 수 있는 정보가 있다. +var message = "문자열 입니다."; + +//컴파일러가 타입을 유추할 수 있는 정보가 없다. 사용불가. +var messages = new ArrayLIst<>(); +``` \ No newline at end of file