1장 - 프로그래밍이란 무엇인가?
- 클래스란 무엇인가?
- 자바의 가장 작은단위로, 현실 세계를 만들기 위한 템플릿이다. 상태(변수)와 행동(메소드)이 있다.
- 메소드가 무엇인가?
- 클래스의 행동으로, 클래스에 소속되어 있어야한다.
- 메소드의 매개변수는 어디에 적는지?
- ()
- 메소드 이름 앞에 꼭 적어줘야 하는 건?
- 접근제어자, 리턴타입
- 클래스가 갖고 있어야 하는 두가지 ?
- 상태와 행동
- 메소드에서 결과를 돌려주려면 어떤 예약어를 사용해야 하는지?
- return
- 예약어란 무엇인가?
- 예약되어 있으니, 쓰지 못하는 단어로 보면되는데 예약어는 클래스, 메소드, 변수의 이름으로 사용할 수 없다.
* 모든 자바 코드의 한 줄이 끝날 때에는 ;를 적어주어야만 한다.
2 장 - Hello God Of Java
- main() 메소드의 메소드 이름 앞에는 어떤 예약어들이 있는가?
- public static void
- static : 메소드를 static으로 선언하면 객체를 생성하지 않아도 호출할 수 있다.
- public static void
- main() 메소드의 매개 변수에는 어떤 값이 들어가는지?
- String[] args
- 만약 클래스에 main() 메소드가 없다면, java 명령어로 그 클래스를 수행할 수 있는지?
- 없음. 자바 프로그램의 진입점(시작점)이므로, 반드시 존재해야 한다.
- System.out.print() 메소드는 어떤 용도로 사용하는지?
- 결과 출력용도
- System.out.print() 메소드는 System.out.println() 메소드와 어떤 차이가 있는지?
- System.out.print() 붙여서 결과 출력, System.out.println()은 줄바꿔서 결과 출력
- //는 어떤 용도로 사용하는지?
- 한줄 주석
- /*로 시작하고 */로 끝나는 사이에 있는 소스들으 어떻게 되는지?
- 컴파일 제외
- 메소드를 선언할 때 반드시 있어야하는 세가지?
- 리턴 타입, 메소드 이름, 메소드 내용
제어자 | main() 메소드에 있는 public static과 같은 메소드의 특성을 정하는 부분 |
리턴 타입 | 메소드가 끝났을 때 돌려주는 타입 |
메소드 이름 | 소괄호 앞에 있는 메소드 이름 |
매개 변수 목록 | 소괄호 안에 있는 매개 변수의 목록 |
예외 목록 | 메소드의 소괄호가 끝나는 부분과 중괄호가 시작하는 부분 사이에 예외 목록이라는 것을 선언할 수 있다. |
메소드 내용 | 중괄호 안에 있는 내용 |
3장 - 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요
- 클래스와 객체의 차이점
- 클래스 - 상태와 행동이 존재하는 자바의 가장 단위로, 현실 세계를 만들기 위한 템플릿
- 객체 - 클래스로 만들어진 실체. 실제 사물을 나타내기 위한 것 (객체 또는 인스턴스)
- 객체를 생성하기 위해 사용하는 예약어는?
- new
- 객체를 생성하기 위해 사용하는 메소드 같이 생긴 클래스 이름에 소괄호가 있는 것은?
- 생성자
- 객체의 메소드를 사용하려면 어떤 기호를 객체 이름과 메소드 이름 사이에 넣어야 하는가?
- .
- 메소드를 사용하기 위해 어떤것을 만들어야 하는지?
- 객체
- 5번 문제에서 만들어야 하는 것은 어떤 예약어를 사용하고, 클래스의 무엇을 사용해야 하는가?
- new, 클래스 이름과 동일한 생성자
* 생성자는 객체를 사용하기 위한 유일한 도구. 매개변수가 없는 생성자를 "기본 생성자"라고 하며, 클래스를 컴파일 할 때 javac를 실행하면 클래스 파일 안에 자동으로 만들어진다.
4장 - 정보를 어디에 넣고 싶은데
- 네 가지 종류의 변수는 어떻게 구분하는가
- 인스턴스 변수 - class안에 있으며, 메소드 밖에 있고 static을 포함하고 있는 것으로 객체가 생성될때 생명 시작하고, 그 객체를 참조하는 다른 객체가 없으면 소멸
- 클래스 변수 - class안에 있으며 메소드 밖에 있는 것으로 클래스가 처음 호출될 때 생명 시작되고, 자바 프로그램이 끝날때 소멸
- 매개 변수 - 메소드에 넘겨주는 변수로 메소드가 호출될 때 생명시작되고, 메소드가 끝나면 소멸된다.
- 지역 변수 - 중괄호 내에서 선언된 변수로 중괄호 내에서만 유효
- 변수의 이름을 지을 때, 대문자로 시작해도 되는가
- 그렇다
- 자료형에는 기본 자료형과 어떤 자료형이 있는지
- 참조 자료형
- 기본 자료형은 몇가지 인지
- 8가지 (byte, int, short, long, char, double, float, boolean)
- 기본 자료형 중 정수형에는 어떤 것들이 있는지
- byte, int, short, long, char
- byte는 몇 비트로 되어있는가
- 8비트
- int와 long 중 어떤 타입이 더 큰 숫자를 처리할 수 있는가
- long
- 소수점을 처리하는 타입에는 어떤 것들이 있는가
- float, double
- char는 정수형인가
- 그렇다
- a라는 것을 char로 정의할 때 어떤 기호로 감싸는가
- ''
- true와 false 두개의 값 만을 가지는 타입은 어떤 것이 있는가?
- boolean
- 기본자료형의 기본 값은?
- char를 제외한 모든 숫자의 기본 값은 0, boolean은 false
초기화
int a = 10; or Calculator calc = Calculator();
new를 사용해서 초기화하는 것을 참조 자료형, 그렇지 않고 바로 초기화 가능한 것을 기본 자료형이라고 한다.
String만이, 참조 자료형이지만 new를 사용해서 객체를 생성하지 않아도 되는 유일한 타입
기본 자료형
- 정수형 : byte, short, int, long, char
- 소수형 : float, double
- 기타 : boolean
타입 | 최소 | 최대 |
byte | -128 | 127 |
short | -32,768 | 32,767 |
int | -2,147,483,648 | 2,147,483,647 |
long | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
char | 0 | 65,535 |
각 타입이 나타낼수 있는 숫자의 범위가 두배씩 증가
구분 | 2의 6 | 2의 5 | 2의 4 | 2의 3 | 2의 2 | 2의 1 | 2의 0 | 값 | |
양수 최대값 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 127 |
음수 최소값 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -128 |
byte, short, int, long타입의 가장 앞의 값만 1인 것은 해당 타입의 최소값이고, 두번째 값부터 1로 채워져 있는 것은 해당 타입의 최대값이다.
byteMin = -128
byteMax = 127 ----> 2진수로 표현하면 1000_0000 에서 1 빼면 0111_1111
byteMin-1 = 127
byteMax+1 = -128 ----> 2진수로 표현하면 0111_1111 에서 1 더하면 1000_0000
byte를 사용하는 이유
적은 공간에 보다 많은 내용을 저장할 수 있도록, byte값들을 조합하여 사용
long 타입의 숫자를 명시적으로 지정해줄 때는 반드시 숫자 가장 뒤에 L을 붙여주어야 한다.
돈계산과 중요한 부분에서는 java.math.BigDecimal이라는 클래스를 사용한다. 32비트(float)와 64비트(double)로 제공할 수 있는 범위를 넘어서면 그 값의 정확성을 보장하지 못하므로.
char 지정하는 방법
- 홑따옴표 안에 직접 지정 ('a')
- '₩u0000'과 같이 홑따옴표 안에 ₩u와 16진수 값을 세팅
- 해당 값의 유니코드 번호 지정 (char 범위 내의 숫자 즉, 0~65,535)
5장 - 계산을 하고 싶어요
- 값을 할당할 때 사용하는 연산자의 기호
- = 대입연산자
- 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지를 계산할 때 사용하는 연산자의 기호
- +, -, *, / , %
- +=는 무엇을 할 때 사용하는가
- 복합 대입연산자로 기존값에 우측의 항을 더한다.
- 연산의 순서를 모르거나 확실히 하고 싶을 때 어떤 기호를 사용해야 하는가
- ()
- == 와 !=의 차이
- == 좌항 우항이 같은지, != 좌항과 우항이 같지 않은지 비교
- < 와 <=의 차이
- < 작거나 <= 작거나 같음
- !연산자는 어떤 타입에 사용가능한가
- boolean
- ?:로 표싷나느 삼항 연산자의 ?와 : 뒤에 명시해주는 값은 무엇을 의미하는가
- 조건 ? true 일 때 : false 일 때
- 자바는 형변환을 한다고 했는데, short의 값을 long에 할당할 때는 어떤것을 해주어야하는가
- long으로 캐스팅 해줘야한다. 그러나 큰 범위로 타입을 변환 할 경우 자동 형변환이 이루어짐
- 반대로 long값을 short에 할당할 때에는 어떤 것을 해주어야 하는가
- short로 캐스팅. 작은 범위로 형변환은 명시를 해줘야함
- 9와 10의 경우 중 어떤 경우가 기존 값이 사라지고, 엉뚱한 값으로 바뀔 수 있는가?
- 10의 경우
* 기본 자료형은 같은 종류끼리 비교가 가능하다. char==int, double==int, boolean == boolean
참조 자료형은 그 주소 값이 같은지 확인한다.
6장 - 제가 조건을 좀 따져요
- if 문장의 소괄호 안에는 어떤 형태의 결과가 제공되어야 하나요?
- boolean
- if 조건에 맞지 않는 모든 경우를 처리할 때 사용하는 예약어는?
- else
- switch를 사용할 수 있는 기본 자료형의 타입에는 어떤 것이 있나?
- long을 제외한 정수와 enum, java7부터는 switch도 가능
- switch 블록 안에서 비교 대상값 앞에 사용하는 예약어
- case
- switch 조건을 빠져나가도록 하는 예약어
- break
- switch 조건들에 맞지않을 때 기본 처리를 하기 위한 예약어
- default
- while문의 소괄호 안에는 어떤 형태의 결과가 제공되어야 하는가?
- boolean
- while문을 무조건 한번은 실행하게 하려면 어떤 예약어를 사용해야 하는가?
- do while
- while문을 마음대로 빠져나가게 하려면 어떤 예약어를 사용해야 하는가?
- break
- while문의 중간에 while문의 소괄호 점검 구문으로 건너뛰도록 할 때 사용하는 예약어는 무엇인가?
- continue
- for 루프의 소괄호안의 가장 첫 구문은 for루프가 수행되는 동안 몇 번 수행되는가?
- 한번
- for 루프의 소괄호 안의 중간에 있는 구문은 어떤 타입의 결과가 제공되어야 하는가?
- boolean
- for 루프의 소괄호 안의 마지막에 있는 구문에서는 어떤 작업을 수행하는가?
- 조건 값 증가
IF
(boolean 값) 처리문장;
true 일때만 처리.
조건이 여러개 일 경우, && 와 || 이용
값의 범위에 따라 결과를 다르게 하기 위해서는 elseIF() 사용
Switch
여러 범위에 걸쳐 비교되어야 할때, 하나의 값으로 분기하여 비교
첫 줄에는 switch(비교대상변수)라고 명시후 중괄호 시작. 비교대상 변수는 long을 제외한 정수형, enum, string
default는 앞에 있는 조건에 맞지 않는 경우에 사용
switch문장에서는 한번 조건을 만족시켜 줬다면, 그 다음 break가 올 때까지 어떤 case가 오든지 상관 없이 계속 무사 통과하며 실행
case에 대한 처리가 끝나면 break; 사용하는 습관
While
while(boolean 조건(){처리문장;}
if와 비슷하나, while은 다시 위로 올라가 boolean조건 확인 후 true 일 경우 계속 실행
continue를 만나면 그 이후의 문장은 수행이 안되고, 바로 반복문의 boolean 조건을 점검하는 곳으로 간다
do-while
적어도 한번은 반복문장이 실행. 한번은 꼭 실행시키고 싶을 때 사용
while의 소괄호 뒤에 세미콜론을 반드시 입력해주어야 한다
for(초기화; 종료조건; 조건 값 증가){}
7장 여러 데이터를 하나에 넣을 수는 없을까요?
1. 배열을 선언할 때 어떤 기호를 변수명의 앞이나 뒤에 사용해야 하나요?
- []
- int[] arr = new int[1]; 또는 int arr1[] = new int[1];
2. 배열의 첫번째 위치는 0인가요? 1인가요?
- 0
3. 배열을 선언할 때 boolean 배열의 크기만 지정했다면 boolean 배열의 [0] 위치에 있는 값은 무엇인가요?
- false
- long 을 제외한 정수형은 null
4. ArrayIndexOutOfBoundsException 이라는 것은 언제 발생하나요?
- 선언한 배열의 위치를 벗어난 예외
5. 중괄호를 이용하여 배열을 초기화 할 때 중괄호 끝에 반드시 어떤 것을 입력해 주어야 하나요?
- ;
6. 2차원 배열을 정의할 때에는 대괄호를 몇 개 지정해야 하나요?
- 2개
- int[][] arr = new int[1][2]; 또는 int arr1[][] = new int[1][2];
7. 배열을 쉽게 처리해주는 for 문의 문법은 어떻게 되나요?
- for (자료형 임시변수 : 반복객체) {}
8. 자바 프로그램에 데이터를 전달해 주려면 클래스 이름 뒤에 어떻게 구분하여 나열하면 되나요?
- 공백으로 구분
- java ArrayMain a b c d e
9. 자바 프로그램이 시작할 때 전달 받는 내용은 어떤 타입의 배열인가요?
- String[]
배열
- 한 변수에 여러 개의 값을 넣을 수 있는 것
- 배열 변수 정의할 때 대괄호 안에는 아무것도 쓰면 안된다.
- int 자체는 기본 자료형이지만, int [] 와 같이 lottoNums는 int 배열로 만든 참조 자료형이다
- 배열의 위치는 0부터 시작하고, 대괄호 안에 데이터를 넣고자 하는 위치를 지정
- 기본 자료형 배열의 기본값은 각 자료형의 기본값과 동일하다
- char배열의 기본값은 '₩u0000'이며, 화면에서는 공백으로 보이고, boolean의 기본값은 false다
- 모든 참조 자료형은 초기화 (new라는 예약어를 써서 생성자를 부르는 작업)을 하지 않으면 null이다
- 선언하는 방법으로는 new int[1];와 같이 new라는 예약어를 사용하고, 타입과 크기를 지정하는 방법 또는 중괄호를 사용 -> 중괄호를 닫은 다음 반드시 세미콜론을 사용하고 절대 변경되지 않는 값을 선언할 때 사용을 권장
2차원 배열
- 배열의 배열을 의미
- int [][]twDim; or int[] towDim[]; or int twoDim[][] 모두 사용가능
- 2차원 배열 twoDim[][]에서 twoDim[0] = int 배열 / twoDim[0][0] = int 값
- 1차원의 크기만 지정하고, 2차원의 크기는 지정하지 않을 수 있지만, 1차원 배열은 빈공간으로 두고 2차원 배열만 지정하거나, 두 배열의 공간의 크기를 모두 지정 안하면 안된다
배열의 길이
- .length
- 2차원 배열의 경우 해당 배열의 크기를 알려달라고 할경우 1차원의 크기를 알려준다.
- 2차원 배열의 길이를 알고 싶을 경우, 각 1차원 배열에 .length를 붙여야함 ex) twoDim[0].length
- twoDim[0][0]는 배열객체를 난타내는 것이 아니라 값이 들어있는 공간으로 길이를 알수 없음
- int와 같은 모든 기본 자료형에는 절대로 .length와 같이 점을 찍어 기능을 호출하거나 계산할 수 없다. 배열과 같이 참조형만 가능
8장 참조 자료형에 대해서 더 자세히 알아봅시다
1. 생성자는 반드시 만들어야 하나요?
- 만들지 않아도 됨. 기본 생성자는 컴파일시 자동 생성
2. 만약 매개변수가 있는 생성자를 만들고, 매개변수가 없는 기본 생성자를 호출하면 어떻게 될까요?
- 기본생성자가 아닌 다른 생성자를 만들면 컴파일러가 기본 생성자를 자동으로 생성해주지 않기때문에 컴파일 에러가 발생
3. 생성자의 개수는 제한이 있나요?
- 없음
4. 인스턴스의 변수와 매개변수나 메소드 내에서 생성한 변수와 구분하기 위해서 사용하는 키워드는 무엇인가요?
- this
5. 메소드 선언시 리턴 타입으로 지정한 데이터를 넘겨줄 때 사용하는 키워드는 무엇인가요?
- return
6. 메소드 선언시 아무 데이터도 리턴 타입으로 넘겨주지 않겠다는 것을 지정하는 키워드는 무엇인가요?
- void
7. 메소드 선언에 static 이 있는 것과 없는 것의 차이는 무엇인가요?
- 객체생성. 최초 클래스 생성시에만 호출되어 사용됨
8. 필자가 엄청나게 중요하다고 한 것 중 메소드의 이름은 같으나 매개변수를 다르게 하는 것의 명칭은 무엇인가요?
- 오버로딩
9. 기본 자료형을 매개변수로 넘겨 줄 때 Pass by value인가요? 아니면 Pass by reference인가요?
- Pass by value
10. 참조 자료형을 매개변수로 넘겨 줄 때 Pass by value인가요? 아니면 Pass by reference인가요?
- Pass by reference
11. 매개변수의 수가 가변적일 때 메소드 선언시 타입과 변수 이름 사이에 어떤 것을 적어줘야 하나요?
- ...
기본생성자
- 자바는 생성자를 만들지 않아도 자동으로 만들어지는 기본 생성자가 있다
- 매개 변수가 없는 생성자는 다른 생성자가 없을 경우 기본으로 컴파일시 만들어지고, 다른 생성자가 있을 경우 자동으로 만들어지지 않는다.
- 자바 클래스의 객체 또는 인스턴스를 생성하기 위해 존재한다
- 리턴 타입이 없는 이유는 생성자의 리턴타입은 클래스의 객체이며, 클래스와 이름이 동일해야 생성자라고 판단
생성자
- 자바는 클래스의 객체를 보다 간편하게 만들기 위해 여러가지 매개변수를 갖는 여러 생성자를 가질 수 있다
- VO는 데이터를 담아두기 위한 목적으로 사용되며, DTO는 데이터를 다른 서버로 전달하기 위한 것이 주목적
- DTO를 만들시 장점은 자바의 메소드 선언시는 리턴타입은 한가지만 선언할 수 있지만 DTO를 사용하면 그 객체를 리턴해 주면 된다.
- 생성자는 매개 변수 개수의 제한은 없으며, 몇개를 만들어도 상관없다.
- this 는 예약어로, 객체의 변수와 매개 변수의 이름이 동일할 때, 인스턴스 변수를 구분하기 위해 사용
메소드 Overloading
- 메소드도 이름을 동일하게 하고 매개 변수를 다르게 하는 것
- 매개 변수의 타입 순서가 다르면 다른 메소드로 생각하지만, 타입이 같고 변수 이름이 같으면 같은 메소드로 인식
- System.out.println()이 대표적
- 같은 역할을 하는 메소드는 같은 메소드 이름을 가져야하는 모토
static 메소드와 일반 메소드의 차이
- System.out.println()는 static이라는 예약어 덕분에 객체를 생성하지 않아도 된다
- static 메소드는 클래스 변수만 사용할 수 있는 단점, 그렇지 않을 경우 컴파일 에러
- 아무 생각 없이 인스턴스 변수에 static을 붙이면 클래스 변수가 되고, 모든 객체에서 하나의 값을 바라본다
static 블록
- 딱 한번만 수행되는 코드
- 객체가 생성되기 전에 한번만 호출된다. 클래스 내에 선언되어야 하며, 메소드 내에서는 선언할 수 없다.
- 클래스를 초기화할 때 꼭 수행되어야 하는 작업이 있을 경우 유용하게 사용
Pass by value
- 값만 전달
- 매개 변수를 받은 메소드에서 그 값을 어떻게 하던지, 원래 값은 변하지 않는다
- 기본자료형은 무조건 pass by value로 데이터를 전달
Pass by Reference
- 호출한 메소드의 데이터에도 영향이 있다
- 참조 자료형은 값이 아닌 참조가 전달되는 pass by reference이다
매개 변수를 지정하는 특이한 방법
- 매개 변수가 몇개가 될 지, 호출시마다 바뀌는 경우 배열을 넘겨주는 방법
- 타입... 변수명 ex) public void calc(int... nums){}
- 하나의 메소드에는 한번만 사용가능하고, 여러 매개 변수가 있을 경우 가장 마지막에 선언해야 한다
- printf(String format, Object... args) 대표적
'JAVA > about java' 카테고리의 다른 글
[Interface, abstract, enum] 인터페이스, 추상클래스, enum / 예외처리 (0) | 2023.04.19 |
---|---|
[JVM] JVM 메모리모델 (0) | 2023.04.18 |
[Muatable and Immutable] 가변 객체와 불변 객체 (0) | 2023.04.17 |
[Access Modifier, extends, Object] 접근제어자 / 상속 / Object 클래스 (0) | 2023.04.16 |
[Map] getOrDefault (0) | 2022.09.26 |