Lecture 02 프로그램 구조 및 문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018
자바 프로그램 기본 구조 Hello 프로그램 구조 sec01/Hello.java
자바 프로그램 기본 구조 Hello 프로그램 구조 클래스 : 객체 지향 언어에서 프로그램을 개발하는 단위 메서드 : 수행할 작업을 나열한 코드의 모임 실행문 : 작업을 지시하는 변수 선언, 값 저장, 메서드 호출 등의 코드 주석문 행 주석 : // 범위 주석 : /* */ 문서 주석 : /** */
자바 프로그램 기본 구조 Hello 프로그램의 확장 주석 추가 : sec01/Hello2.java
식별자 (Identifier) 규칙 문자, 언더바(_), $로 시작 한글도 가능, 영문자 대·소문자를 구분 +, - 등 연산자를 포함하면 안됨 자바 키워드를 사용하면 안됨 길이에 제한이 없음 잘못된 식별자 : %5, a+b, 1b 올바른 식별자 : radius, $a, _int
식별자 관례 변수와 메서드는 모두 소문자 단, 복합 단어일 때는 두 번째 단 어부터 단어의 첫 자만 대문자로 표기 단, 복합 단어일 때는 두 번째 단 어부터 단어의 첫 자만 대문자로 표기 클래스와 인터페이스는 첫 자만 대문자로 표기, 나머지는 소문자 로 표기. 단, 복합 단어일 때는 두 번째 단어부터 단어의 첫 자만 대문자로 표기 상수는 전체를 대문자로 표기. 단 , 복합 단어일 때는 단어를 언더 바(_)로 연결
데이터 타입 의미 종류
데이터 타입 기억 공간 크기 및 기본 값
변수 (variable) 의미 프로그램은 기억 공간에 데이터를 보관하고, 각 기억 공간을 변수 Variable로 구분 변수는 데이터를 담는 상자와 같은 것으로 종류가 다양한데, 이를 구분 하려고 데이터 타입을 사용
변수 리터럴 프로그램 내부에서 값을 정의해 변수를 초기화, 그 값을 리터럴 정수 실수 가수 지수
변수 예제 코드 : sec03/NumberTypeDemo.java 실행 결과
변수 문자 논리 예제 코드 sec03/CharBoolDemo.java 실행 결과
변수 변수 사용
변수 변수 사용
변수 상수 (constant) 프로그램 실행 중 변경할 수 없는 데이터를 담는 변수 예, 원주율 값(3.14159)이나 빛의 속도(3×108m/s) 등 상수 이름은 변수와 구분하려고 모두 대문자로 표기 반드시 final 키워드로 지정
타입 변환 (type conversion) 자동 타입 변환 (implicit type conversion) 강제 타입 변환 (explicit type conversion, casting)
타입 변환 연산 중 필요하면 타입 범위가 넓은 방향으로 자동 타입 변환 예
타입 변환 예제 코드 : sec03/CastDemo.java 실행 결과
입출력 표준 입출력 (standard input/output)
기본 입출력 화면에 데이터 출력 사용 예 println() : () 내부의 내용을 출력한 후 행을 바꿈 printf() : 포맷을 지정해서 출력 사용 예 System.out.printf(
printf() 형식
기본 입출력 예제 sec04/PrintfDemo.java 05 int i = 97; 06 String s = "Java"; 07 double f = 3.14f; 08 System.out.printf("%d\n", i); 09 System.out.printf("%o\n", i); 10 System.out.printf("%x\n", i); 11 System.out.printf("%c\n", i); 12 System.out.printf("%5d\n", i); 13 System.out.printf("%05d\n", i); 14 System.out.printf("%s\n", s); 15 System.out.printf("%5s\n", s); 16 System.out.printf("%-5s\n", s); 17 System.out.printf("%f\n", f); 18 System.out.printf("%e\n", f); 19 System.out.printf("%4.1f\n", f); 20 System.out.printf("%04.1f\n", f); 21 System.out.printf("%-4.1f\n", f);
기본 입출력 printf()의 포맷과 실행 결과
기본 입출력 키보드로 데이터 입력 Scanner 클래스의 경로 이름을 컴파일러에 알림 import java.util.Scanner; 키보드로 데이터를 입력받으려고 System.in 객체와 연결된 Scanner 객 체를 생성. Scanner in = new Scanner(System.in); Scanner 클래스가 제공하는 다양한 메서드를 이용해 키보드로 데이터 를 입력. int x = in.nextInt(); // 정수를 읽어 변수 x에 대입
기본 입출력 키보드로 데이터 입력 Scanner 클래스가 제공하는 데이터 입력 메서드 예제 : sec04/ScannerDemo.java
연산자 연산자와 연산식의 의미 JVM은 기본적으로 32비트 단위로 계산
연산자 종류
연산자 산술 연산자 피연산자의 데이터 타입에 따라 결과 값이 다른데, 연산할 두 피연산자 의 데이터 타입이 다르면 큰 범위의 타입으로 일치시킨 후 연산 수행 논리 타입을 제외한 기초 타입을 피연산자로 사용. 단, % 연산자는 정수 타입만 사용 덧셈 연산자는 문자열을 연결하는 데도 사용. 문자열과 덧셈을 하는 데 이터는 먼저 문자열로 변환한 후 서로 연결 예제 : sec05/ArithmeticDemo.java
연산자 비교 연산자 비교 연산자는 논리 타입을 제외한 기초 타입에만 사용할 수 있지만 == 와 !=는 모든 기초 타입에 사용 종류
연산자 논리 연산자 논리 연산자는 피연산자의 조건을 결합해서 true와 false를 조사하며, 논 리 타입에만 사용 종류
쇼트서킷
연산자 논리 연산자 예제 : sec05/CompLogicDemo.java
연산자 비트·시프트 연산자 비트 연산자와 시프트 연산자는 정수 타입에만 사용 비트 연산자의 종류 예
연산자 비트·시프트 연산자 시프트 연산자의 종류 예
연산자 비트·시프트 연산자 예제 : sec05/BitOperatorDemo.java 03 public class BitOperatorDemo { 04 public static void main(String[] args) { 05 System.out.printf("%x\n", 0b0101 & 0b0011); 06 System.out.printf("%x\n", 0b0101 | 0b0011); 07 System.out.printf("%x\n", 0b0101 ^ 0b0011); 08 System.out.printf("%x\n", (byte) ~0b00000001); 09 System.out.printf("%x\n", 0b0110 >> 2); 10 System.out.printf("%x\n", 0b0110 << 2); 11 12 int i1 = -10; 13 int i2 = i1 >> 1; 14 int i3 = i1 >>> 1; 15 System.out.printf("%x -> %d\n", i1, i1); 16 System.out.printf("%x -> %d\n", i2, i2); 17 System.out.printf("%x -> %d\n", i3, i3); 18 } 19 }
연산자 대입 연산자 오른쪽에 있는 연산식의 결과 값을 왼쪽에 있는 변수에 대입 예
연산자 대입 연산자 복합 대입 연산자의 종류 예제 : sec05/AssignmentDemo.java
연산자 부호·증감 연산자 숫자를 나타내는 기초 타입에 사용하며 피연산자의 부호를 그대로 유지 하거나 반전 증감 연산자는 변수의 위치에 따라 의미가 다름 종류 예제 : sec05/SignIncrementDemo.java
연산자 조건 연산자 조건 연산자 (?: ) 조건식이 true이면 결과 값은 연산식1의 값이 되고 false이면 결과 값 은 연산식2의 값. 조건 연산자도 쇼트서킷 로직을 이용하기 때문에 조건식에 따라 연산식 1과 연산식2 중 하나만 실행 예제 : sec05/TernaryOperator.java
연산자 우선순위
연산자 결합 규칙 예제 : sec05/OperatorPrecedenceDemo.java true