diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..e69de29b
diff --git a/.idea/2021-Java-Study-1.iml b/.idea/2021-Java-Study-1.iml
new file mode 100644
index 00000000..d6ebd480
--- /dev/null
+++ b/.idea/2021-Java-Study-1.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..40674af8
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..b2e511f6
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..35eb1ddf
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 00000000..f6c3516e
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1610777331766
+
+
+ 1610777331766
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/3\354\243\274\354\260\250\352\263\274\354\240\234/\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/\354\236\220\353\260\224\352\270\260\354\264\210.md"
new file mode 100644
index 00000000..57a88e83
--- /dev/null
+++ "b/3\354\243\274\354\260\250\352\263\274\354\240\234/\354\236\220\353\260\224\352\270\260\354\264\210.md"
@@ -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|
+
+
+
+
+### 1.2 레퍼런스 타입(참조 타입)
+
+- 기본형 타입 제외한 타입들이 모두 참조형 타입
+- 빈 객체를 의미하는 Null 존재
+- 값이 저장된 곳의 주소값을 저장하는 공간으로 **힙 메모리**에 저장됨
+- 문법상으로는 에러가 없지만 실행 시킬때 에러가 나는 런타임 에러가 발생
+
+|타입|예시|할당되는 메모리 크기|기본값|
+ |----|------------|----|-----|
+|배열(Array)|int[]arr = new int[5];|4byte(객체의주소값)|Null|
+|열거(Enumeration)| |4byte(객체의주소값)|Null|
+|클래스(Class)|String str = "project"; 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;
+```
+
+
+- 실수 리터럴
+```
+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;
+```
+
+
+- 문자 리터럴
+```
+단일 인용부호('')로 문자 표현
+
+char a = 'S';
+char b = "사";
+char c = \uae00; //유니코드값, \u다음 4자리 16진수로
+```
+- 문자열 리터럴
+```
+기본타입이 아님, ("")로 문자열 표현
+String lter = "JAVA";
+lter + 26 = "lter26" //문자열 출력
+```
+
+
+- 논리 리터럴
+```
+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으로 변환 됨
+
+
+### 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 {
+
+ private T t;
+
+ public void add(T t) {
+
+ this.t = t;
+
+ }
+
+}
+```
+#### 7.2.2 Generic 클래스 선언과 생성
+| 클래스명 뒤에 <제너릭타입> 덧붙임
+```
+Test integerTest;
+
+integerTest = new Test();
+```
+
+### 7.2.3 Generic 타입에 사용되는 파라미터
+| 타입 매개변수는 하나의 대문자 사용
+```
+E - Element
+
+K - Key
+
+N - Number
+
+T - Type
+
+V - Value
+
+S,U,V etc. - 2nd, 3rd, 4th types
+```
+
+
+
+
+
+
diff --git "a/3\354\243\274\354\260\250\352\263\274\354\240\234/\354\236\220\353\260\224\354\275\224\353\223\234\354\213\244\354\212\265.md" "b/3\354\243\274\354\260\250\352\263\274\354\240\234/\354\236\220\353\260\224\354\275\224\353\223\234\354\213\244\354\212\265.md"
new file mode 100644
index 00000000..055eb7fc
--- /dev/null
+++ "b/3\354\243\274\354\260\250\352\263\274\354\240\234/\354\236\220\353\260\224\354\275\224\353\223\234\354\213\244\354\212\265.md"
@@ -0,0 +1,211 @@
+# 2021-java-study
+2021 자바 스터디 3주차 과제
+
+# 자바 코드 실습
+
+## 자바 코딩 규칙 (Java Code Convention)
+
+## 1. 파일 이름
+
+### 1.1 파일 확장자
+자바 소스: .java
+
+자바 바이트코드: .class
+### 1.2 공통 파일 이름
+GNUmakefile: make 파일 이름, 소프트웨어를 빌드 할 때는 gnumake 명령어 사용
+
+README: 특정 디렉토리 내용 요약하는 파일 이름으로 사용
+
+
+## 2. 파일 구조
+### 2.1 자바 소스 파일
+자바 소스 파일의 순서
+- 시작 주석
+```
+/* 클래스 이름
+ 버전 정보
+ 날짜
+ 저작권 주의
+*/
+```
+
+- Package 문, Import 문
+```
+package java.awt;
+import java.awt.peer.CanvasPeer;
+```
+- Class, Interface 선언
+```
+1. 문서화 주석
+2. 클래스/인터페이스 문
+3. 구현 주석
+4. 클래스 변수
+5. 일반 변수
+6. 생성자
+7. 메소드
+```
+
+## 3. 들여쓰기
+
+### 3.1 줄 나누기
+- 콤마 후 두 줄로 나눔
+- 연산자 앞에서 두 줄로 나눔
+- 레벨이 높은 원칙에 따라 두 줄로 나눔
+- 앞줄과 같은 레벨식이 시작되는 새로운 줄은 앞줄과 들여쓰기를 일치
+
+## 4. 주석
+
+### 4.1 구현 주석
+- 블록 주석
+```
+/*
+블록 주석
+*/
+```
+- 한 줄 주석
+```
+/* 한줄 주석 */
+```
+- 꼬리 주석
+```
+int ggori; /*꼬리 주석*/
+```
+- 줄 끝 주석
+```
+int ggori; // 줄 끝 주석
+```
+
+### 4.2 문서화 주석
+```
+/**
+ * Example 클래스는..
+ */
+public class Example { ...
+```
+다음 5가지를 설명
+- 자바 클래스
+- 인터페이스
+- 생성자
+- 메서드
+- 필드
+## 5. 선언
+
+### 5.1 한 줄 당 선언문 수
+한줄에 하나의 선언문이 좋음
+```
+int a; // a 선언
+int size; // 크기 선언
+```
+
+### 5.2 배치
+블록 시작에 선언 해야 함
+```
+void myTest(){
+ int i=0; //메서드 블록 시작
+
+ if( ...) { //if 블록 시작
+ ...
+ }
+}
+```
+예외: 반복문
+```
+for (int i=0;i
+- 여는 중괄호 "{"는 클래스/인터페이스/메소드 선언과 동일한 줄 끝에 사용
+- 닫는 중괄호 "}"는 null문 제외 하고는 여는 문장과 동일한 들여쓰기 하는 새로운 줄에서 사용
+- 각 메소드 사이에는 한 줄 비우기
+
+## 6. 문(statements)
+
+### 6.1 복합문
+- 여는 중괄호 "{"는 복합문 시작 줄 마지막에 위치
+- 닫는 중괄호 "}"는 새로운 줄에 쓰고, 복합문 시작과 같은 들여쓰기
+- 둘러싸인 문들은 복합문보다 한단계 더 들여쓰기
+
+### 6.2 return문
+괄호를 사용하지 않는 것이 좋음
+
+## 7. 공백
+
+- 괄호와 함께 나타나는 키워드는 공백으로 나눠야함
+- 메소드 이름과 메소드 여는 괄호 사이 공백 사용 안됨
+- .을 제외한 모든 이항 연산자들은 연산수들과 공백으로 분리 되어야 함
+- 단항 연산자의 경우는 사용 X
+- for문에서 세개의 식은 공백으로 구분
+- cast의 경우 공백으로 구분
+
+
+## 8. 명명 규칙
+### 8.1 Packages
+- 패키지 이름의 최상위 레벨은 항상 ASCII 문자에 포함되어 있는 소문자로, 가장 높은 레벨의 도메인 이름 중 하나여야 함
+- 패키지 이름의 나머지 부분은 조직 내부의 명명 규칙 따르면 됨
+- 예를 들어 부서명,팀명,프로젝트명,컴퓨터이름,로그인 이름 등
+```
+com.sun.eng
+com.apple.quicktime.v2
+edu.cmu.cs.bovik.cheese
+```
+
+### 8.2 Classes
+- 클래스 이름은 명사여야 하고, 복합 단어일 경우 각 단어의 첫글자가 대문자
+- 간단하고 명시적으로 작성
+- 두문자어와 약어는 피하도록 함
+```
+class Raster;
+class ImageSprite;
+```
+
+### 8.3 Interfaces
+- 클래스와 같이 대문자 사용 규칙 적용
+```
+interface RasterDelegate;
+```
+
+### 8.4 Methods
+- 메소드 이름은 동사로 시작하고, 복합 단어일 경우 첫 단어는 소문자로 시작, 후에 나오는 단어의 첫문자는 대문자로 사용
+```
+runFast();
+getBackground();
+```
+
+### 8.5 Variables
+- 변수 이름의 첫 번째 문자는 소문자, 각각 내부 단어 첫글자는 대문자
+- 이름은 짧지만 의미있게
+- 한 문자로 이루어진 변수는 암시적으로만 사용, 버릴 경우 제외하고는 피해야함
+- 임시 변수의 이름은 integer의 경우 i,j,k,m,n character의 경우는 c,d,e 사용
+```
+int i;
+char c;
+float myWidth;
+```
+
+## 9. 좋은 프로그래밍 습관
+
+### 9.1 인스턴스 변수는 외부 노출말고 접근 제공
+- 이유없이 public 선언 말기
+
+### 9.2 클래스 변수(static 변수)와 클래스 메소드(static 메소드)는 클래스 이름을 사용해 호출
+- 클래스 변수나 클래스 메소드를 호출하기 위해 객체 사용하는 것은 피하기
+- static으로 선언한 것은 이미 메모리에 올라가 있고, 객체를 사용(인스턴스화)하면 또다시 메모리에 올라가게 됨
+
+```
+classMethod(); //좋은 사용
+AClass.classMethod(); //좋은 사용
+anObject.classMethod(); //나쁜 사용
+```
+### 9.3 변수 값 할당 시 주의
+- 하나의 문에서 같은 값을 여러개 변수들에 할당 말기
+```
+fooBar.fChar = barFoo.lchar = 'c' // 이렇게 사용하지 않기
+```
+
+- 비교 연산자와 혼동하기 쉬운 곳에 할당 연산자 사용 말기
+```
+if(c++ = d++){
+ ...
+} // X
+```
\ No newline at end of file