[Java] 변수, 연산, 조건문, 반복문, 배열

JH·2023년 3월 20일

Java

목록 보기
1/21

1. TIL


A. 변수 (Variable)

1. 하나의 값을 저장할 수 있는 기억공간

상수(constant) – 한 번만 값을 저장할 수 있는 공간

리터럴(literal) – 그 자체로 값을 의미하는 것


2. 변수의 종류

기본형 (Primitive type) : 실제 값을 저장

  • 논리 - boolean
  • 문자 - char
  • 정수 - byte, short, int, long
  • 실수 - float, double


종류,크기8bit (1byte)16bit (2byte)32bit (3byte)64bit (4byte)
논리형boolean
문자형char
정수형byteshortintlong
실수형floatdouble

부호 때문에 실제 bit는 다를 수 있음

참조형 (Reference type)

  • 기본형을 제외한 나머지 (String, System 등)
    객체의 주소를 저장 (4byte, 0x00000000 ~ 0xffffffff)

3. 초기화, 선언, 할당

int score = 100; // 초기화
int score; // 선언
score = 100; // 할당

* 명명규칙

  • 대소문자가 구분되며 길이제한이 없음

  • 예약어를 사용할 수 없음 (ex true)

  • 숫자로 시작할 수 없음

  • 특수문자는 '__' 와 '%' 만 가능

  • 클래스의 첫 글자는 항상 대문자로 지정

  • 여러 단어일 경우 camel case로 지정 (ex userId)

  • 상수의 이름은 대문자로 지정
    여러 단어는'___' 구분 (ex MAX_NUMBER)

  • java는 정수 연산에서 기본적으로 int 를 사용함
    java는 실수 연산에서 기본적으로 double 을 사용함

  • long, float 일 경우 숫자뒤에 지정된 문자를 적어야함

float vf1 = 3.14F

4. 변수의 기본값과 초기화

변수의 초기화 : 변수에 처음으로 값을 저장하는 것
* 지역변수는 사용되기 전에 반드시 초기화 해야함
변수의 기본값

* 형변환 (casting)

  • 값의 타입을 다른 타입으로 변환하는 것
  • boolean을 제외한 7개의 기본형은 서로 형변환이 가능


B. 연산 (Operation)

1. 연산자(Operator)

  • 어떠한 기능을 수행하는 기호(+,-,*,/ 등)

피연산자(Operand)

  • 연산자의 작업 대상(변수,상수,리터럴,수식)

2. etc

산술 연산

  • % : 나눈 나머지를 알려줌

증감 연산

  • ++i : 값이 참조되기 전 증가
  • i++ : 값이 참조된 후 증가

논리 연산

  • && (and), ||(or), !(not)
  • ^ : 둘의 값이 무조건 다를 때 참을 반환함

대입 연산

  • =, += 등이 있음
int a = 3
a += 5 // print: 8
a = a + 5 // 같은 의미임

비교 연산

  • ==, !=, <, >, <=, >= 이 있음

삼항 연산자

  • (조건식) ? 식1 : 식2
  • 조건식이 참이면 식1을 거짓이면 식2를 실행함

이 외에 비트 연산자와 쉬프트 연산자도 있음

3. 연산자의 우선 순위

  • 괄호의 우선순위가 제일 높다. - 산술 > 비교 > 논리 > 대입

  • 단항 > 이항 > 삼항

  • 연산자의 연산 진행방향은 왼쪽에서 오른쪽(→)이다.

  • 단, 단항, 대입 연산자만 오른쪽에서 왼쪽(←)이다.

  • &&연산이 ||연산보다 우선 순위가 높음


C. 조건문 (Condition)

1. if

  • if, if else, if else if 세가지 형태가 있음
  • 조건문을 중첩하여 사용할 수 있음
if (조건식) {
	조건식이 true일 떄 실행
}

2. switch case

  • 조건식 결과가 int 범위의 이하의 정수만 가능
  • case문의 값으로 변수를 사용할 수 없음
switch (조건식) {
	case 10:
    	break
    case 22:
    	break
    deafault:
} 


D. 반복문 (Loop)

  • 반복문 또한 중첩하여 사용할 수 있음
  • break : 자신이 포함된 하나의 반복문, switch문을 빠져 나옴
  • continue : 자신이 포함된 반복문 끝으로 이동함

for

  • 특정 횟수를 반복할 때 사용함
for (초기화; 조건식; 증감식) {
	실행 블럭 : 조건식이 true일 떄 실행
}

향상된 for

for (타입 변수 : 집합객체) {
	수행코드;
}

while

  • 횟수가 불분명할 때 사용함
while (조건식) {
	실행 블럭 : true일 떄 실행
}

do while

  • {} 블럭이 최소한 1번 이상 수행될 것을 보장함
do {
	실행 블럭 : true일 떄 실행
} while (조건식);


E. 배열 (Array)

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 반드시 초기값 (배열의 크기)을 가져야 함

1. 배열의 선언, 생성, 초기화

int[] arr1; //  배열 선언
arr1 = new int[5]; // 배열 생성
// 각 배열의 값은 int타입의 기본값인 0이 설정됨

int[] arr2 = {1, 2, 3, 4, 5}; // 배열 초기화
int[] arr2 = new int[] {1, 2, 3, 4, 5};

초기값(크기)이 정해지지 않았을 때, 자바에서 배열은 선언만 하고 사용X, 크기를 지정해야함

String[] name;
name = new String[] {"lee", "bob","john"};

arr2를 직접 출력하면 주소가 출력되므로
arr2[idx] 로 접근하고 전체를 출력하려면 for문을 사용함

// 데이터 접근
System.out.println(arr2[4]);

// 배열 전체 출력
for (int i = 0; i < arr2.length; i++) {
	System.out.println(arr2[i]);
}

2. 배열 복사

얕은 복사 (call by reference)

얕은 복사는 주소 자체를 복사하기 때문에 원본 배열이 훼손됨

int [] nums = {1, 2, 3};
int [] copyNums = nums;

copyNums[1] = 20;

System.out.println(copyNums[1]); // print 20
System.out.println(nums[1]); // print 20

깊은 복사 (deep copy)

깊은 복사는 원본 배열 훼손 X, copyOf 메소드 사용

int [] nums = {1, 2, 3};

int[] deepNums = Arrays.copyOf(nums, nums.length);
		
deepNums[1] = 5;
		
for (int i : deepNums) {
	System.out.println(i);	// print 1, 5, 3
}
		
for (int j : nums) {
	System.out.println(j);	// print 1, 20, 3
}


2. 에러

이클립스와 JDK가 호환이 안되는 경우가 있다.
JDK11버전과 이클립스가 호환되지 않아 21년 3월 버전으로 바꾸니 해결됨



3. 보완 해야 할 것

int[] arr2 = {1, 2, 3, 4, 5}; // 배열 초기화
int[] arr2 = new int[] {1, 2, 3, 4, 5};

new 키워드의 자세한 이해가 필요한 것 같다.
위 두 개의 코드가 같은 의미로 사용할 수 있는지 모르겠다.


4. 느낀점

앞서 배운 JavaScript와 비슷한 점이 종종 있다.
JavaScript에서의 배열은 더 다루기 편한 느낌였고
Java의 배열은 규칙을 더 엄격하게 따지는 것 같았다.
배열에 대한 부분이 부족한 것 같으므로 더 복습해야겠다.


profile
잘해볼게요

0개의 댓글