전공/JAVA

[제2장] 자바 기본 프로그래밍

vss121 2022. 9. 16. 17:43

2.1 자바 프로그램의 구조

 

``` public class Hello { } ```

public은 접근지정자로 다른 모든 클래스에서 클래스 Hello를 자유롭게 사용할 수 있다는 선언

 

main() 메소드

- public static void 타입으로 선언되어야 함

- 한 클래스에 2개 이상의 main() 안 됨

- 실행을 시작할 클래스에만 main() 두기

 

메소드

- 클래스의 멤버 함수를 가리킴

- 매소드 내에 선언되어 사용되는 변수 = 지역변수

 

화면 출력

- System.out.println() 출력 후 다음 행으로 이동

- System.out.print() 이동 안 함

 

public class Hi {

	public static void main(String[] args) {
		
		System.out.println("Hi");
	}
}

 

2.2 식별자

: 이름을 말함

 

1. 특수문자 _와 $만 사용 가능

2. 한글 가능

3. 키워드, true, false, null 불가능

4. 첫 문자로 숫자 불가능

5. 대소문자 구별

6. 길이 제한 없음

 

 

2.3 자바의 데이터 타입 (9)

기본 타입 boolean (논리타입, 1b, true or false)
char (문자타입, 2B)
byte (정수타입, 1B, -128~127)
short (정수타입, 2B)
int (정수타입, 4B)
long (정수타입, 8B)
float (실수타입, 4B)
double (실수타입, 8B)
레퍼런스 타입 1. 배열에 대한 레퍼런스
2. class에 대핸 레퍼런스
3. interface에 대한 레퍼런스

문자 하나는 2B의 유니코드로 저장됨

문자열은 String 클래스 이용

 

 

리터럴

정수 리터럴 -> int 타입으로 자동 컴파일됨

15(십진수), 015(8진수, 13), 0x15(16진수, 21), 0b0101(2진수, 5) 

long g = 24L; -> l이나 L붙여서 long 타입으로 컴파일

실수 리터럴 -> double 타입으로 자동

0.1234, 1234E-4

0.1234f(f/F로 float), .1234D(d/D로 double)

문자 리터럴 -> char

'w', \u0041

특수문자 리터럴

논리 리터럴

boolean a = true;

boolean b = false;

 

기타) null 리터럴(기본 타입이 아닌 객체 레퍼런스에만), 문자열 리터럴(형식: "문자", String 객체에 저장)

 

 

 

> 상수

final double PI = 3.141592;

 

 

타입 변환

자동 타입 변환 : 작은-> 큰 타입

long m = 25;

강제 타입 변환 : casting, 데이터 손실

byte b = (byte)300; // b=44

(300%256), byte타입은 0~255범위, byte에 저장될 수 있는 수는 -128~127

 

Q.

(char)0x12340041 ===> 0x0041 => 'A'

(byte)227 => 227(decimal) == 1110 0011(binary) -> 2의 보수에서 220 1101 -> -29

 

 

 

 

2.4 자바에서 키 입력

System.in

표준 입력 스트림 객체

입력된 키를 바이트 정보로 응용 프로그램에게 제공 -> 다시 변환해야 함

 

Scanner

import java.util.Scanner;
Scanner scanner = new Scanner(System.in);

scanner 객체는 System.in 객체를 이용해 키보드로부터 일련의 바이트 정보들을 입력받고, 이 바이트들을 원하는 타입으로 변환하여 리턴

Scanner 클래스는 공백문자(' ', '\t', '\n')을 기준으로 분리하여 토큰 단위로 읽는다

Scanner scanner = new Scanner(System.in);
String name = scanner.next();
String city = scanner.next();
int age = scanner.nextInt();
double weight = scanner.nextDouble();
boolean isSingle = scanner.nextBoolean();

scanner.close();

nextLine() 공백이 낀 문자열 입력받을 때, 빈 문자열(엔터 키 입력)도 리턴

next()는 공백 전까지, 빈 문자열 리턴 안 함

 

Scanner 객체는 하나만 생성하는 게 좋음 ∵ 하나뿐인 System.in을 공유해서

 

 

 

 

2.5 연산

산술

/ 는 몫, & 은 나머지

실수 나누기 10.0/4 == 2.5

 

증감

논리

a ^ b : XOR, a와 b가 다를 때 true

 

조건

조건 연산자는 3개의 피연산자로 구성, 삼항 연산자

condition ? opr2 : opr3

true면 왼쪽, false면 오른쪽

 

 

 

 

 비트

비트 논리 연산

&, |, ^, ~

비트 시프트 연산

 
 
 

byte, short, int, long, char 타입만 가능, float, double, boolean X

 

Ex.

byte a = 5;

byte b = (byte) (a<<2);

 

0000 0101

0001 0100 // 20

 

Ex.

byte c = (byte) 0xf8;  // 1111 1000 는 0000 1000의 음수= -8

byte d = (byte) (c>>2); // -2

 

1111 1000

1111 1110 // 0000 0010의 음수는 -2

 

 

산술적 오른쪽 시프트(>>)는 1bit 시프트마다 2로 나누는 결과

산술적 왼쪽 시프트(<<)는 1bit 시프트마다 2로 곱하는 결과, 음수(MSB가 -1)를 시프트하여 양수 발생(MSB 0) - 오버플로우 가능성

 

 

 

 

2.6 조건문

 

1. if 문

 

2. if-else

 

3. switch

 

 

 

'전공 > JAVA' 카테고리의 다른 글

[패스트캠퍼스] Spring 강의 - 학습 후기 및 과제 진행  (0) 2023.12.31