javaStudy Chap. 2, 3, 4

Jieun·2022년 3월 27일
0

자바

목록 보기
1/4

챕터2-2. 변수의 타입

- 자료형

기본형 : boolean, 문자형, 정수형, 실수형
참조형 : 기본형을 제외한 나머지 타입, 객체의 주소를 저장함, 변수의 타입으로 클래스 이름을 사용

- 상수와 리터럴

상수
1. 값을 변경할 수 없음
2. 선언과 동시에 초기화
3. final 변수타입 변수명 = 값;

리터럴은 우리가 원래 아는 상수, 값 그 자체를 의미하지만
프로그래밍에서 '값을 변경할 수 없는 저장공간'의 상수와 구별하기 위해 대신 사용

리터럴의 타입, 접미사
●정수형
디폴트 int / long 타입 => l, L
● 실수형
디폴트 double / float 타입 => f

즉 float, double타입 변수를 선언할 때만 주의해주기

● 문자열
변수타입 String 으로 선언
, 원래 String class이므로 new를 사용해야 하지만 생략한 표현도 가능

문자열 덧셈
피연산자 중 어느 한 쪽이 String이면 다른쪽도 String으로 변환 한 후 두 String을 결합
=> 기본형 타입의 값 + ""(빈문자열) => 문자열로 변환 가능

지시자, prinf

%b => bool
%d => 10진수 정수
%o => 8진 정수
%x => 16진 정수
%c => char (char타입 값을 %d로 출력하는 것은 불가능)
%s => String
%f => float

  1. 지시자 앞에 숫자 : %nd => 출력될 값이 n자리 공간을 차지함
  2. -숫자 : %-nd => 출력될 값이 앞에서부터 n자리 공간을 차지함
  3. 0숫자 : %0nd => 출력될 값이 n자리 공간을 차지하며, 공백을 0으로 채움
  4. 소수점 아래자리 지정 : %n.mf => 전체 n자리 중 소수점 아래 m자리, 소수점 아래 빈 자리는 0으로 채움

타입캐스팅
bool 타입을 제외한 기본형끼리 형변환이 가능

(타입)피연산자

=> 피연산자가 해당 타입으로 변환됨

  1. 정수형 간 형변환
    작은 타입 -> 큰 타입 : 크기 차이만큼 값 손실
    큰 타입 -> 작은 타입 : 양수는 0, 음수는 1로 채움
  2. 실수형 간 형변환
  3. 정수형 - 실수형 간 형변환
    정수 -> 실수 : 그냥 실수의 저장형식에 맞게 저장
    실수 -> 정수 : 반올림 없이 소수점 아래 값 버림

자동 형변환
저장 할 수 있는 범위 내의 값인 경우 컴파일러가 자동으로 형 변환
더 큰 범위의 값으로의 변환도 명시적으로 표시했을 경우에는 에러 발생x

자동 형변환은
" 기존 값을 최대한 보존할 수 있는 타입으로 변환 "
= 더 저장 범위가 넓은 쪽으로 맞춰서 변환


Chap. 3

Java의 정석 Chapter.3 연산자

연산자의 종류

산술연산자 : 사칙연산, 나머지연산, 시프트
비교연산자 : 대소, 등가 비교
논리연산자 : AND, OR 연산
대입연산자 : =
기타연산 : (type), 삼항연산, instanceof

기억해야 할 연산자 우선순위

  1. 산술 > 비교 > 논리 > 대입
    : 산술을 가장 먼저, 대입을 가장 나중에, 비교 > 논리
    : 산술 연산자 중에는 사칙연산 > 시프트
  2. 단항연산 > 이항연산 > 삼항연산
  3. 연산의 진행방향은 왼->오 (단항연산, 대입연산은 예외 : 오->왼)
  4. AND 연산 > OR 연산

헷갈리는 표현은 그냥 괄호를 사용하자

연산에서의 타입변환 - 1

  1. 시프트, 증감연산은 타입변환 x
  2. 피연산자 간의 타입을 일치 : 범위가 큰 쪽으로
  3. 피연산자가 int보다 작은 타입이면 int로 변환 : char, short, ..
  4. 연산결과의 타입은 피연산자와 같은 타입으로 나옴
    (결과가 실수값이라도 결과의 타입이 int인 경우 소수점 버림)

연산에서의 타입변환 - 2 : 사칙연산 시

  1. 큰 수 -> 작은 데이터타입으로 변환하는 경우 : 데이터 손실이 발생해 값이 바뀔 가능성 O
    , 따라서 처음부터 큰 자료형을 사용하거나 결과값의 자료형을 변환하는 것이 아닌 피연산자의 자료형을 변환해야 함
    long c = (long)(a * b) : X
    long c = (long)a * b : O
  2. 접미사를 붙이지 않은 숫자 리터럴은 int 타입 -> 리터럴 자체의 연산에서도 오버플로우 발생 할 수 있음을 주의
    : 1000000 * 1000000 은 int간의 연산이므로 오버플로우 발생
    , 1000000 * 1000000L으로 형변환 해서 연산해야 함
  3. 변수가 포함되지 않은 상수나 리터럴 간의 연산은 컴파일러가 미리 수행해둔다
    -> 다른 타입의 변수로 리터럴 연산 결과를 대입하는 경우, 형변환을 하지 않아도 에러발생x
char c1 = 'a'
char c2 = c1 +1  /// 컴파일에러발생
char c2 = 'a' +1 ///에러 발생 x 

● 비교연산에서의 주의할 점

1. 비교연산 시에도 두 피연산자 중 더 큰 타입으로 자동 형변환을 한다
, 실수형 간 자동 형변환시 근사값때문에 오차가 발생할 수 있다 ( d<->f )
2. 문자열의 비교는 비교연산자 == 가 아닌 equals() 메소드를 사용한다
: 문자열 간 == 연산은 내용의 비교가 아닌 같은 객체인지 여부의 판단을 수행하기 때문

● 대입연산자 : lvalue, rvalue

lvalue : =의 왼쪽에 있는 피연산자 : 값을 변경(=저장)할 수 있어야 함 (상수, 리터럴, 연산식 X )
rvalue : 변수, 식, 상수 전부 O


Java의 정석 챕터4 조건문, 반복문

조건문

- if 문

if ( 조건식 : true or fasle ) {
    // 조건식이 true 일 때 실행 }
else {
	// 조건식이 false일 때 실행 }

if 안에 if를 중첩으로 사용해 중첩 if문으로도 사용가능

- switch 문

if문보다 많은 경우의 수 처리 가능

switch (조건식) {
	case1 : 
    	//조건식==값1인경우
        //수행될 문장
        break; // 빠져나감
     case2 :
     	//..
     //..
     //..
     default :
     //조건식과 일치하는 값이 없는 경우
     //수행될 문장
 }

break가 없을 경우 switch문을 끝내는 괄호가 나올 때까지 문장을 전부 실행하므로 break 붙이는 거 잊지 말 것

제약조건
1. 조건식의 결과는 정수 or 문자열
2. case문의 값은 정수 상수만 가능, 중복 불가능


- 반복문

- for

for(초기화 ; 조건식 ; 증감식 ) {
	//실행할 문장
}

초기화 : 사용할 변수를 초기화, 단 한번만 수행
조건식 : 해당 조건식을 만족한 경우에 밑의 문장을 실행
증감 : 반복문을 제어하는 변수의 값을 변화시킴

  • 향상된 for문
    배열이나 컬렉션의 요소에 접근하는 경우에 사용
for( 타입 변수명 : 배열 또는 컬렉션 ) {
	//반복할 문장
{

배열에 저장된 값이 순서대로 읽혀서 변수에 저장 -> 괄호 안의 실행할 문장에서 해당 변수를 이용해 수행

- while

while ( 조건식 ) {
	//실행문
}

조건식 참 -> 문장 수행
조건식 거짓 -> 해당 루프 벗어남

break, continue

  • break : 자신이 포함된 가장 가까운 반복문을 벗어남
    주로 조건을 걸고 조건 만족시 벗어나는 용도로 사용
  • continue : 반복문 끝으로 이동하여 다음 반복으로 넘어감
    반복문 자체를 벗어나지 않고 다음 반복을 수행한다.
    특정 조건을 만족하는 경우만 반복에서 제외하는 경우에 사용

0개의 댓글

관련 채용 정보