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 + + + + + + \ 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