자바 프로그램을 개발할 때, 일반 Editor 사용하면 어떤 점이 불편한지 기술하고, 이를 개선하기 위해 eclipse 같은 IDE를 사용하면 어떤 장점이 있는지 기술하세요.
Variable(변수)란?
- 수학에서 변하는 수
- 컴퓨터에서는 메모리 공간, 그릇
- 메모리 공간에 값을 할당후 사용
- 공간의 크기는 타입별로 달라짐
Type이란?
- 변수에 저장되는 데이터의 종류
- Primitive Type(기본형) :
- 미리 정해진 크기의 Memory Size로 표현, 변수 자체에 값 저장
- 기본형 데이터 타입은 총 8개
- boolean, byte, short, int, long, float, double, char
- Reference Type(참조형) :
- 미리 정해질 수 없는 데이터의 표현, 변수에는 실제 값을 참조할 수 있는 주소만 저장
- 참조형 데이터 타입은 기본형 데이터 타입의 나머지 모든 데이터 타입의 갯수이다.
- String, 배열형, Home과 같은 사용자 정의 타입
형 변환(Type Casting)이란?
- 변수의 타입을 다른 타입으로 변환하는 것 (char <-> int)
- primitive는 primitive끼리, reference는 reference끼리 형 변환 가능
(boolean은 다른 기본 타입과 호환되지 않음, 기본 타입과 참조형의 형 변환을 위해서 Wrapper 클래스 사용)
- 형 변환 방법은 (int)처럼 괄호 사용한다.
- 작 -> 큰 : 묵시적 형 변환 - 값 손실이 없다.
- 큰 -> 작 : 명시적 형 변환 - 값 손실 있을 수 있다.
- 값의 크기, 타입의 크기가 아닌 타입의 표현 범위가 커지는 방향으로 할당할 경우는 묵시적 형변환 발생
- byte -> short, char -> int -> long -> float -> double
- 명시적 형변환은 값 손실이 발생할 수 있으므로 프로그래머 책임하에 형변환 진행
- 묵시적 형변환은 자료의 손실 걱정이 없으므로 JVM이 서비스 해줌.
연산자란?
- 어떤 기능을 수행하는 기호 (+, -, *, /, %, ...)
- 비트 논리 연산자 (&, |, ^, ~)
- & : 두 피 연산자의 비트 값이 모두 1인 경우만 1, 나머지는 0
- | : 두 피 연산자의 비트 값이 모두 0인 경우만 0, 나머지는 1
- ^ : 두 피 연산자의 비트 값이 서로 다르면 1, 같으면 0
- ~ : 피 연산자의 모든 비트를 반전 시킴 -> 1의 보수
- 비트 이동 연산자(쉬프트 연산자) (<<, >>, >>>)
- << : 앞의 피 연산자 비트 열을 뒤 피 연산자 만큼 왼쪽으로 이동하고 이동에 따른 빈 공간은 0으로 채움.
- >> : 앞의 피 연산자 비트 열을 뒤 피 연산자 만큼 오른쪽으로 이동하고 이동에 따른 빈 공간은 음수는 1, 양수는 0으로 채움.
- >>> : 앞의 피 연산자 비트 열을 뒤 피 연산자 만큼 오른쪽으로 이동하고 이동에 따른 빈 공간은 0으로 채움.
*2, /2에 비해 속도가 빠르다.
- 논리 연산자 (&,| vs &&, ||)
-- 논리 연산자
- & : 두 개의 피 연산자가 모두 true인 경우 true
- | : 두 개의 피 연산자가 모두 false인 경우 false
- ! : 단항 연산자로 피 연산자의 값이 false이면 true, true이면 false로 변경
- ^ : 두 피 연산자가 서로 다를 경우만 true, 같으면 false
-- Short Circuit 연산자
- && : &와 동일한 의미이나 앞의 피 연산자가 false이면 뒤의 피 연산자를 검사하지 않는다.
- || : |와 동일한 의미이나 앞의 피 연산자가 true이면 뒤의 피 연산자를 검사하지 않는다.
Random 수 구현하기
구분 | 코드 | |
Math.random() | Math.random() | 0.0 <= ? < 1.0 |
Math.random() * N | 0.0 <= ? < N.0 | |
(int) (Math.random() *N) | 0 <= ? <= N-1 | |
(int) (Math.random() *N) + 1 | 1 <= ? <= N | |
Random rand = new Random(); rand.nextInt(N); |
rand.nextInt(N) | 0 <= ? < N |
rand.nextInt(N) + 1 | 1 <= ? <= N | |
% Operator | 충분히 큰 Random 수 % N | 0 <= ? <= N-1 |
충분히 큰 Random 수 % N + 1 | 1 <= ? <= N |
ex) 주사위를 던져서 나올 수 있는 경우의 수
int random = rand.nextInt(6) +1;
int random2 = (int) (Math.random() * 6) +1;
조건문
- if(..) : 논리형, 비교식, Method Call
- switch(..) : 정수호환, Enum, Class Object, Method Call
반복문
for(변수 초기화; 반복 조건; 증감식) {
break; //실행 및 종료
}
while(...) {
break;
}
break : 특정한 조건에 따라 반복문 중단
continue : 특정한 조건에 따라 그 조건의 경우에만 수행하지 않고 계속 반복문을 이어서 진행
for vs while
- for
- 초기값, 조건식, 증감식의 위치가 명확
- 예측 가능한 반복 (횟수가 정해져 있을 때)
- index의 증감 활용
- while
- 예측 가변적인 반복 (상태의 변화)
- index 보다는 break, continue 활용
java.util.Scanner
주요 API
- .hasNext()
- .next() : white space를 경계로 문자열 읽기, white space가 나오면 중지
- .hasNextXXX()
- .nextXXX()
- .nextLine() : 개행 문자까지 읽기
- .next().charAt(0)
다양한 출력 메서드
- System.out.print(XX) : 모니터 상에 XX를 출력함.
- System.out.println(XX) : print + 개행문자 (엔터키)
- System.out.printf(format_문자, 파라미터) : 포멧 문자에 따른 출력
지시자 | 설명 | 지시자 | 설명 |
%b | 논리값(boolean) | %d | 10진수 정수 |
%o | 8진수 | %x, %X | 16진수 |
%f | 10진수 실수 | %e, %E | 지수형태 표현 |
%c | 문자 | %s | 문자열 |
%n | 개행 문자 | %숫자[s/d/..] | 자리수 지정 %5s :문자열로 5자리 |
동일한 type의 변수를 여러 개 사용
- 변수의 수 증가
- 코드의 길이 증가
- 반복문 적용 불가
- 변수의 수가 동적으로 결정될 경우, 사용 불가
배열(Array)로 동일 Type 변수 대신하기
- 배열이란? 동일한 타입의 데이터 여러 개를 하나의 연속된 메모리 공간에서 관리하는 것
- 요소에 접근하는 속도가 매우 빠르며 크기 변경이 불가
Array 만들기 1
- 타입[] 변수명; or 타입 변수명[]
- 즉[ ]의 위치는 상관 없으나 가급적 타입 바로 뒤에 붙여서 배열 형임을 알기 쉽게 표시
- XX형 배열 타입 이라 부른다.
- 데이터가 들어갈 수 있는 공간이 만들어지는 것. (데이터가 만들어지는 것 X)
배열의 생성과 초기화
- new keyword와 함께 배열의 데이터 타입 및 크기 지정 : new data_type[length]
- ex) new int[3] :int타입의 자료 3개를 저장할 수 있는 배열을 메모리에 생성
- ex) points = new int[3] : 생성된 배열을 points라는 변수에 할당
- ex) points는 메모리에 있는 배열을 가리키는 reference 타입 변수
- 배열을 생성과 동시에 자료형에 대한 default 초기화 진행
자료형 | 기본값 | 비고 |
boolean | false | |
char | '\u0000' | 공백 문자 |
byte, short, int | 0 | |
long | 0L | |
float | 0.0f | |
double | 0.0 | |
참조형 변수 | null | 아무것도 참조하지 않음 |
배열의 사용
- 배열은 index 번호를 가지고 각 요소에 접근 가능
- index 번호는 0부터 시작
- 배열의 길이 : 배열이름.length로 배열의 크기 조회 가능
Arrays.toString()
- for문을 통한 출력 대신 array 출력을 편리하게 사용해주는 api
Array 만들기 2
- 생성과 동시에 할당한 값으로 초기화
- ex) int[] b = {1, 2, 3, 4, 5};
- ex) int[] c = new int[] {1, 2, 3, 4, 5};
- 선언 후 생성 시 초기화 주의 : 따로 구현시 적용 안된다.
배열의 생성과 메모리 사용 과정
1. 배열 선언 : int[] points;
2. 배열 생성 : new int[3]; 메모리에 연속된 공간 차지 -> 크기 변경 불가. Type에 대한 default 초기화
3. 참조 값 할당 : points = new int[3];
4. 요소에 값 할당 : points[0] = 1; points[1] = 'A';
for-each with Array
- 가독성이 개선된 반복문으로, 배열 및 Collections에서 사용
- index 대신 직접 요소(elements)에 접근하는 변수를 제공
- naturally ready only(copied value)
- : 사용
Array is Immutable
- 최초 메모리 할당 이후, 변경할 수 없음
- 개별 요소는 다른 값으로 변경이 가능하나, 삭제할 수는 없음
- 크기를 늘리거나 줄일 수 없음
System.arraycopy
- api 제공하는 배열 복사 method
2차원 Array 만들기 1
- int Type 기준으로 4x3 배열 만들기
선언 | 생성 | 할당 |
int[][] intArray; | int Array = new int[4][3]; | int Array[0][2] = 3; |
int intArray[][]; | ||
int[] intArray[]; |
2차원 Array 만들기 2
- int Type 기준으로 4X3 배열과 값을 동시에 만들기
- int[][] intArray = {{0, 1, 2}, {0, 1, 2}, {0, 1, 2}, {0, 1, 2}};
- Array는 {}안에, 와 {}를 이용해서 선언과 동시에 값을 할당
2차원 Array 만들기 3
- int[][] intArray = new int[4][];
- intArray[1] = new int[2]; //필요에 따라 2차 배열 생성
- intArray[0] = new int[4];
- intArray[2] = {1, 2, 3} (X)
Array 순회 / 탐색
- 특정 좌표로부터 주변을 탐색하는 경우, 배열의 범위를 벗어나지 않기 위한 코드 필요
'Java' 카테고리의 다른 글
JAVA 복습 - 객체지향 프로그래밍 1 (0) | 2021.08.07 |
---|---|
String , StringBuilder, StringBuffer의 차이 (0) | 2021.08.03 |
Stack 클래스와 메소드 정리 (0) | 2021.08.01 |
String 클래스와 메소드 정리 (0) | 2021.06.09 |
Math 클래스와 메소드 정리 (0) | 2021.05.26 |