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 2/40
자바프로그램기본구조 Hello 프로그램구조 클래스 : 객체지향언어에서프로그램을개발하는단위 메서드 : 수행할작업을나열한코드의모임 실행문 : 작업을지시하는변수선언, 값저장, 메서드호출등의코드 주석문 행주석 : // 범위주석 : /* */ 문서주석 : /** */ 3/40
자바프로그램기본구조 Hello 프로그램의확장 주석추가 : sec01/hello2.java 연산자사용 : sec01/hello3.java 변수사용 : sec01/hello4.java 4/40
식별자 (Identifier) 규칙 문자, 언더바 (_), $ 로시작 한글도가능, 영문자대 소문자를구분 +, - 등연산자를포함하면안됨 자바키워드를사용하면안됨 길이에제한이없음 잘못된식별자 : %5, a+b, 1b 올바른식별자 : radius, $a, _int 5/40
식별자 관례 변수와메서드는모두소문자 단, 복합단어일때는두번째단어부터단어의첫자만대문자로표기 클래스와인터페이스는첫자만대문자로표기, 나머지는소문자로표기. 단, 복합단어일때는두번째단어부터단어의첫자만대문자로표기 상수는전체를대문자로표기. 단, 복합단어일때는단어를언더바 (_) 로연결 6/40
데이터타입 의미 종류 7/40
데이터타입 기억공간크기및기본값 8/40
변수 (variable) 의미 프로그램은기억공간에데이터를보관하고, 각기억공간을변수 Variable 로구분 변수는데이터를담는상자와같은것으로종류가다양한데, 이를구분하려고데이터타입을사용 9/40
변수 리터럴 프로그램내부에서값을정의해변수를초기화, 그값을리터럴 정수 실수 가수 지수 10/40
변수 예제 코드 : sec03/numbertypedemo.java 실행결과 11/40
변수 문자 논리 예제 코드 sec03/charbooldemo.java 실행결과 12/40
변수 변수사용 13/40
변수 변수사용 14/40
변수 상수 (constant) 프로그램실행중변경할수없는데이터를담는변수 예, 원주율값 (3.14159) 이나빛의속도 (3 10 8 m/s) 등 상수이름은변수와구분하려고모두대문자로표기 반드시 final 키워드로지정 15/40
타입변환 (type conversion) 자동타입변환 (implicit type conversion) 강제타입변환 (explicit type conversion, casting) 16/40
타입변환 연산중필요하면타입범위가넓은방향으로자동타입변환 예 17/40
타입변환 예제 코드 : sec03/castdemo.java 실행결과 18/40
입출력 표준입출력 (standard input/output) 19/40
기본입출력 화면에데이터출력 println() : () 내부의내용을출력한후행을바꿈 print() : () 내부의내용을출력만하고행은바꿈없음 printf() : 포맷을지정해서출력 사용예 System.out.printf( 20/40
printf() 형식 21/40
기본입출력 예제 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); 22/40
기본입출력 printf() 의포맷과실행결과 23/40
기본입출력 키보드로데이터입력 Scanner 클래스의경로이름을컴파일러에알림 import java.util.scanner; 키보드로데이터를입력받으려고 System.in 객체와연결된 Scanner 객체를생성. Scanner in = new Scanner(System.in); Scanner 클래스가제공하는다양한메서드를이용해키보드로데이터를입력. int x = in.nextint(); // 정수를읽어변수 x 에대입 24/40
기본입출력 키보드로데이터입력 Scanner 클래스가제공하는데이터입력메서드 25/40
연산자 연산자와연산식의의미 JVM 은기본적으로 32 비트단위로계산 26/40
연산자 종류 27/40
연산자 산술연산자 피연산자의데이터타입에따라결과값이다른데, 연산할두피연산자의데이터타입이다르면큰범위의타입으로일치시킨후연산수행 논리타입을제외한기초타입을피연산자로사용. 단, % 연산자는정수타입만사용 덧셈연산자는문자열을연결하는데도사용. 문자열과덧셈을하는데이터는먼저문자열로변환한후서로연결 예제 : sec05/arithmeticdemo.java 28/40
연산자 비교연산자 비교연산자는논리타입을제외한기초타입에만사용할수있지만 == 와!= 는모든기초타입에사용 종류 29/40
연산자 논리연산자 논리연산자는피연산자의조건을결합해서 true 와 false 를조사하며, 논리타입에만사용 종류 30/40
쇼트서킷 31/40
연산자 논리연산자 예제 : sec05/complogicdemo.java 32/40
연산자 비트 시프트연산자 비트연산자와시프트연산자는정수타입에만사용 비트연산자의종류 예 33/40
연산자 비트 시프트연산자 시프트연산자의종류 예 34/40
연산자 비트 시프트연산자 예제 : 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 } 35/40
연산자 대입연산자 오른쪽에있는연산식의결과값을왼쪽에있는변수에대입 예 36/40
연산자 대입연산자 복합대입연산자의종류 예제 : sec05/assignmentdemo.java 37/40
연산자 부호 증감연산자 숫자를나타내는기초타입에사용하며피연산자의부호를그대로유지하거나반전 증감연산자는변수의위치에따라의미가다름 종류 예제 : sec05/signincrementdemo.java 38/40
연산자 조건연산자 조건연산자 (?: ) 조건식이 true 이면결과값은연산식 1 의값이되고 false 이면결과값은연산식 2 의값. 조건연산자도쇼트서킷로직을이용하기때문에조건식에따라연산식 1 과연산식 2 중하나만실행 예제 : sec05/ternaryoperator.java 39/40
연산자 우선순위 40/40
연산자 결합규칙 true 41/40
Q & A