자바 이론 및 예제 복습(기초 문법 - 리터럴과 변수 | 연산자 | 메소드 | 제어문 | 배열)
✅자바 이론 및 예제 복습 - Part 1. 기초문법 완료(2022.01.30)
🚀 자바 기초 문법에 대해 이해하고 개발에 적용할 수 있다.
리터럴과 변수LITERAL AND VARIABLE
📚 이론
[JAVA] 1-2. 변수 명명 규칙, 상수, 오버플로우, 형변환
▶오버플로우 개념을 설명할 때 '사인 비트를 침범한다'고 표현할 수 있다.
📚 학습점검
🚀 변수의 개념을 이해하고 개발에 적용할 수 있다.
-- LITERAL
✅ 값의 형태에 대해 이해할 수 있다.
✅ 값을 직접 연산하여 출력할 수 있다.
▶100, 3.14, 'A' 등등 리터럴을 일컫는다.
✅ 문자열 합치기를 이해할 수 있다.
▶ANY TYPE + ""는 String으로 반환된다.
-- VARIABLE
✅ 변수를 사용하는 목적을 이해할 수 있다.
▶변수란 하나의 데이터를 저장할 수 있는 공간으로, 변수 사용 목적은 코드상에 재사용성 및 유지보수성을 높이고자 하는 데 있다.
✅ 기본자료형의 값 저장 구조를 이해할 수 있다.
✅ 자료형별 변수를 선언하고 값을 대입할 수 있다.
▶기본자료형은 boolean, char, byte, short, int, long, float, double 총 8가지가 있다. 자주 쓰이는 자료형 중 String은 참조형 타입이다.
✅ 변수의 명명 규칙중 컴파일 에러를 발생하는 규칙을 제외시켜 변수를 선언할 수 있다.
✅ 변수의 명명 규칙 중 암묵적 규칙을 적용하여 변수를 선언할 수 있다.
▶camel-case 적용한다. 한글도 쓰일 순 있으나 통용되지 못할 환경을 고려해 삼가는 것이 좋다. 특수문자는 _와 $만 쓰일 수 있다.
-- CONSTANT
✅ 상수에 대해 이해할 수 있다.
✅ 상수의 사용 목적을 이해할 수 있다.
✅ 상수를 선언하고 초기화 하여 사용할 수 있다.
▶카드의 높이와 길이는 같아야 하는 것처럼 고정된 값을 여러 곳에서 써야 할 때 활용할 수 있다. 한 번 초기화한 이후에는 변경이 불가하다.
✅ 상수의 명명 규칙에 따라 상수를 사용할 수 있다.
▶일반 변수와 구분되도록 대문자와 _로 작성한다.
-- OVERFLOW
✅ 오버플로우와 언더플로우의 원리에 대해 이해할 수 있다.
▶일상 생활서 23:59:59초를 가리키던 전자시계가 00:00:00으로 넘어가는 원리와 같다. 최대값 + 1은 최소값으로, 최소값 - 1은 최대값으로 순환한다.
✅ 오버플로우가 발생할 상황을 예측하여 대응할 수 있다.
▶별도의 오류 코드는 발생하지 않는 상황이기에, 더 큰 데이터 타입에 결과를 담는 등 사용자(개발자)가 미리 대응하는 것이 방법이다.
-- TYPECASTING
✅ 데이터 형변환이 필요한 이유를 설명할 수 있다.
▶서로 다른 데이터 타입간 연산이 필요한 경우 등에 쓰인다.
✅ 자동 형변환(묵시적 형변환)이 필요한 상황과 규칙을 이해하고 적용할 수 있다.
✅ 강제 형변환(명시적 형변환)이 필요한 상황을 이해하고 적용하여 연산을 수행할 수 있다.
▶각 자료형마다 크기가 상이하다. 큰 자료형에서 작은 자료형으로 옮겨갈 때는 반드시 강제 형변환이 필요하다. 이때 실수형은 정수형보다 크므로 long → floast은 묵시적 형변환도 가능하다.
✅ 형변환을 이용하여 서로 다른 자료형의 연산을 할 수 있다.
✅ 형변환 시 데이터 손실 발생 원리를 이해하고 적용할 수 있다.
▶특히 실수값을 정수로 옮겨 담았을 때 소수점자리에 대한 손실이 발생한다.
연산자OPERATOR
📚 이론
▶논리연산자 사용 중 앞에 쓰인 조건 결과에 의해 어차피 true, 어차피 false인 데 대해서는 Dead code라 칭함을 배웠다.
📚 학습점검
🚀 연산자의 사용 목적을 이해하고 다양한 값들을 연산할 수 있다.
-- ARISTHMETIC
✅ 산술연산자를 이해하고 사용할 수 있다.
▶모드를 포함한 +, -, *, /를 말한다. 우선순위에 유의해 쓰여야 한다.
-- ASSIGNMENT
✅ 산술 복합 대입 연산자를 이해하고 사용할 수 있다.
▶+=, -=처럼 산술연산자와 대입연산자가 함께 작성되는 모양새이다. 이때 대입연산자가 뒤에 쓰임에 주의해야 한다.
-- INCREMENT/DECREMENT
✅ 증감연산자를 이해하고 사용할 수 있다.
▶전위연산, 후위연산으로 나눠볼 수 있다. 후위연산의 경우는 대입 등의 타 연산자가 먼저 치러진 뒤 증감하는 차이가 있다.
-- COMPARISON
✅ 비교연산자를 이해하고 사용할 수 있다.
▶boolean과 String은 그 특성상 같다(==), 다르다(!=)는 비교만 가능하다.
-- LOGICAL
✅ 논리연산자를 이해하고 사용할 수 있다.
✅ 논리연산자의 우선순위를 파악하고 사용할 수 있다.
✅ 논리연산자의 진리표를 이해할 수 있다.
▶결과를 true 또는 false로 반환하는 AND(&&), OR(||) NOT(!)을 말한다. AND > OR 우선수위가 적용된다. 진리표에서 AND의 경우 두 조건이 모두 true여야만 true 결과를 내고, OR는 둘 중 하나라도 true이면 true를 낸다는 차이를 보인다.
-- TERNARY
✅ 삼항연산자를 이해하고 사용할 수 있다.
▶(조건식) ? true일 때 값 : false일 때 값으로 쓰인다. 삼항연산자를 중첩해 사용할 수도 있다.
메소드METHOD
📚 이론
[JAVA] 3-2. Math, Random, Scanner 클래스
📚 학습점검
🚀 메소드의 사용 목적을 이해하고 활용할 수 있다.
-- METHOD
✅ 메소드가 무엇인지 이해할 수 있다.
▶수학에서의 함수와 유사한 개념이다. 특정 작업을 수행하기 위한 명령문 집합을 말한다.
✅ 메소드 호출 흐름에 대해 이해할 수 있다.
▶객체 선언, 호출, 출력으로 이어진다.
✅ 전달인자와 매개변수를 이해하고 메소드 선언 및 호출 시 사용할 수 있다.
▶메소드가 호출될 때 (소괄호) 안에 명시하여 보내는 값이 전달인자(argument)다. 매개변수(parameter)는 그러한 전달인자를 교류하기 위해 메소드 선언부의 (소괄호) 안에 사용된 변수를 말한다. 매개변수 자리로 전달인자가 들어오는 것이다.
✅ 메소드 리턴과 리턴값 대해 이해할 수 있다.
✅ 전달인자와 매개변수, 리턴값을 복합 활용하여 메소드를 작성하고 호출할 수 있다.
▶return;은 실행하던 과정을 종료하고 자신이 호출된 곳으로 복귀하도록 만드는 명령어이다. 이는 모든 메소드 최하단에 속한다고 할 수 있다. void의 경우 컴파일러가 자동 추가해주기에 생략한 채 쓰이고 있다.
✅ static 메소드를 작성하고 호출할 수 있다.
✅ 다른 클래스에 작성된 메소드를 호출할 수 있다.
▶non-static 메소드와 static 메소드는 호출 시 차이가 있다. static은 객체 생성 없이 호출한다는 것이다.
-- PACKAGE
✅ 패키지에 대해 이해할 수 있다.
▶클래스명은 사실 패키지명+클래스명으로 불려야 맞다. 이를 짧게 쓸 수 있었던 이유는 동일 패키지상에 있기 때문이다. 이처럼 패키지(package)란 서로 관련 있는 클래스/인터페이스 그룹이다.
-- IMPORT
✅ import에 대해 이해할 수 있다.
▶다른 패키지에 있는 클래스를 가져다 쓰고자 할 때는 패키지명+클래스명으로 지어진 긴 이름을 호출하거나 import를 선언해 대신할 수 있다. 어느 패키지에 속한 어떤 클래스를 사용할지 미리 선언하는 효과를 가졌다.
▶자주 쓰여 컴파일러가 자동 추가해주기에 별도 import 선언 없이 사용되는 예로는 java.lang 패키지가 있다.
-- API(Math)
✅ Math 클래스의 메소드를 호출하여 사용할 수 있다.
✅ 난수 발생 계산식을 이해하여 적용할 수 있다.
✅ 원하는 범위의 난수를 발생시킬 수 있다.
▶int random = (int)Math.random * 100 + 1;
▶new Random().nextInt(100) + 1;
-- API(Scanner)
✅ Scanner를 이용하여 값을 입력받을 수 있다.
✅ next()와 nextLine()의 공통점과 차이점을 이해할 수 있다.
▶공백 미포함/공백 포함이라는 차이를 지녔다.
✅ 스캐너 사용 시 주의사항에 대해 숙지하고 적용할 수 있다.
제어문FLOW CONTROLLER STATEMENT
📚 이론
[JAVA] 4-3. 분기문 break, continue
📚 학습점검
🚀 제어문의 사용 목적을 이해하고 개발에 적용할 수 있다.
-- CONDITIONAL
✅ 단독 if문의 수행 흐름을 이해하고 적용할 수 있다.
▶if(조건식)으로 작성한다. 조건식을 만족할 때 블럭 안의 명령문을 수행한다.
✅ if-else 구문의 수행 흐름을 이해하고 적용할 수 있다.
▶조건식은 여전히 하나이다. if(조건식)에 만족하면 해당 블럭을 수행하고, 만족하지 않으면 else 블럭을 수행한다.
✅ if-else-if 구문의 수행 흐름을 이해하고 적용할 수 있다.
▶여러 조건식 쓸 수 있지만, 이 경우에도 만족하는 조건 하나에 대해서만 수행되는 점은 동일하다.
✅ switch 구문의 수행 흐름을 이해하고 적용할 수 있다.
▶switch(비교할변수)~case(비교할값)을 나열해 쓴다.
-- LOOPING
✅ for문의 흐름을 이해하고 적용할 수 있다.
▶for(초기식; 조건식; 증감식)으로 작성한다. 첫 반복 때는 초기식, 조건식에 대해 읽고 두 번째 반복부터 증감이 이루어진다. for(;;)처럼 작성해 무한반복문을 유도할 수 있다.
✅ while문의 문법을 이해하고 적용할 수 있다.
▶초기식 / while(조건식) / { 증감식 }으로 구성된다. 중첩 사용도 물론 가능하며, 이때 내부 while문의 초기식 위치는 외부 while문 안이다.
✅ do-while문의 문법을 이해하고 적용할 수 있다.
▶무조건 한 번은 실행된다. do 일단 진행하고, while(조건식)을 따져보겠다는 의미이다. 따라서 do~while(false)는 한 번, do~while(true)는 무한반복된다.
-- BRANCHING
✅ break문을 이해하고 적용할 수 있다.
▶break; 즉시 수행하던 반복문을 빠져나온다. 라벨링을 통해 어떤 반복문을 빠져나갈지 설정할 수 있다.
✅ continue문을 이해하고 적용할 수 있다.
▶전체 반복 중 특정 조건을 만족하는 경우를 제외하고자 할 때 쓰인다. continue;를 만나면 for문의 증감식, while문은 조건식으로 이동한다.
배열ARRAY
📚 이론
📚 학습점검
🚀 배열의 사용 목적을 이해하고 개발에 적용할 수 있다.
-- PRIMATIVE TYPE ARRAY
✅ 배열의 사용 이유를 이해할 수 있다.
▶같은 자료형을 가진 값들을 묶어서 관리할 수 있다. 반복문을 통한 연속처리가 가능해지고, 연속된 메모리 공간으로 관리하는 데도 보다 용이해지는 것이다.
✅ 배열의 구조를 이해할 수 있다.
▶배열은 참조형으로서 Heap 영역에 할당된 주소값을 참조하고 있을 뿐이다.
✅ 배열의 인덱스가 무엇인지 이해할 수 있다.
✅ 배열의 선언 및 할당을 하여 값을 대입할 수 있다.
✅ 배열을 선언하면서 동시에 초기화를 할 수 있다.
▶int[] arr은 Stack 영역에 배열 선언, new arr[index]는 Heap 영역에 배열 할당한 것이다. 할당과 동시에 자료형의 JVM 기본값으로 초기화된다.
✅ 반복문을 이용하여 배열의 인덱스에 순차적으로 접근할 수 있다.
▶for(int i=0; i < arr.length; i++) 조건으로 접근할 수 있다.
✅ 배열에 저장되는 값의 형태별 기본값에 대해 이해할 수 있다.
▶JVM 기본값에 따라 초기화된다.
-- DEMENSINAL ARRAY
✅ 다차원 배열의 구조를 이해할 수 있다.
▶int[][] arr = new [행][열]; 처럼 작성한다. 배열의 묶음이라고 할 수 있다.
✅ 정변 배열과 가변 배열을 이해할 수 있다.
▶다차원 배열 종류이다. 할당 시 new [3][5]라면 행의 길이가 3이고 열의 길이가 5인 정변배열, new[3][]이면 행의 길이는 3이되 열의 길이가 각각 다른 가변 배열임을 알 수 있다.
✅ 다차원 배열을 선언 및 할당하여 값을 대입할 수 있다.
✅ 다차원 배열을 선언하면서 동시에 초기화를 할 수 있다.
▶int[][] arr = {iarrA, iarrB, iarrC}; 블럭 {} 안에서 초기화한다. 다른 배열을 담을 수도 있다.
✅ 반복문을 이용하여 다차원 배열의 인덱스에 순차적으로 접근할 수 있다.
-- ARRAY COPY
✅ 얕은복사와 깊은복사의 개념을 이해할 수 있다.
✅ 얕은복사를 활용하여 메소드 호출 인자나 리턴값으로 활용할 수 있다.
✅ 깊은복사의 방법을 숙지하고 적용할 수 있다.
▶얕은복사는 같은 주소값을 참조하는 배열이 늘어나는 경우를 말한다. 대개 매개변수나 전달인자로 쓰이는 경우를 일컫는다. 사용자(개발자)가 별도로 복사를 행하는 영역이 아니다.
▶반대로 깊은복사는 주소값이 전혀 다른 새로운 배열 객체가 생성된 경우를 말한다. 대표적인 깊은복사 방법으로는 for문, clone(), System.arraycopy(), Arrays.copyOf() 활용법이 있다. 개중 System.arraycopy()가 주로 쓰인다.
✅ 향상된 for문을 이해할 수 있다.
▶일반 for문은 인덱스에 직접 접근해 사용하는만큼 변경사항에 영향을 끼치고 받는다. 반면 향상된 for문은 (임시변수 : 반복할값)처럼 임시적으로 변수에 담아 출력하기에 직접적인 사용은 이루어지지 않는다. 즉 값의 변경이 아니라 조회(사용)를 위해서라면 향상된 for문을 쓸 수 있다.
-- ARRAY SORT
✅ 변수에 저장된 두 값을 교환할 수 있다.
▶스왑이라고 칭한다. 임시변수를 필요로 한다. tmp = i / i = j / j = tmp;
✅ 순차정렬을 이용하여 배열의 인덱스에 저장된 값을 정렬할 수 있다.
▶Arrays.sort()메소드를 사용하는 방법도 있다.
'Java' 카테고리의 다른 글
[JAVA/수업 과제 practice] 1차 필기 테스트 (0) | 2022.02.02 |
---|---|
[JAVA/2nd Review] Part 2. 객체 지향 프로그래밍 (0) | 2022.02.01 |
[자바의 정석] Ch 9. API 예제 응용 학습 (0) | 2022.01.23 |
[자바의 정석] Ch 8. 예외처리 예제 응용 학습 (0) | 2022.01.22 |
[자바의 정석] Ch 8. 예외처리 연습문제 풀이 (0) | 2022.01.22 |