학습 개요
- java 언어의 기본 문법과 기본 자료형을 숙지하며 리터럴 사용 방법 익힘
- 자료형 변환에서 묵시적 변환과 명시적 변환의 차이를 이해
- 연산자 종류와 각 연산자의 기능 이해
- 변수의 종류를 용도 별로 구분
- 선택문과 반복문의 사용 방법 확인
학습 목표
- java의 기본 자료형 나열 가능
- 변수의 종류를 나열하고 용도의 차이 설명 가능
- 연산자의 종류를 나열하고 기능 설명 가능
- 제어문의 종류와 기능 설명 가능
강의록
Java 프로그램과 기본 사항
Java 프로그램의 작성
성적 처리 프로그램 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14
class Grade { int e; //영어 성적을 위한 변수 int m; //수학 성적을 위한 변수 void input_grade(int a, int b) { e = a; //영어 성적 입력 m = b; //수학 성적 입력 } void output_grade() { // 성적의 합을 출력 System.out.println(e+m); } }
1 2 3 4 5 6 7 8 9 10 11 12 13
public class GradeOutput { public static void main(String args[]) { Grade g1, g2; // 성적을 표현하는 객체 g1 = new Grade(); // 객체 생성 g2 = new Grade(); g1.input_grade(90, 85); // 점수 입력 g2.input_grade(80, 80); g1.output_grade(); // 점수 출력 g2.output_grade(); } }
성적 처리 프로그램 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
public class GradeOutput2 { int e; // 영어 성적을 위한 변수 int m; // 수학 성적을 위한 변수 void input_grade(int a, int b) { e = a; // 영어 성적을 입력 m = b; // 수학 성적을 입력 } void output_grade() { // 성적의 합을 출력 System.out.println(e + m); } public static void main(String args[]) { GradeOutput2 g1, g2; // 2명의 성적을 표현 g1 = new GradeOutput2(); // 객체 생성 g2 = new GradeOutput2(); g1.input_grade(90, 85); // 점수 입력 g2.input_grade(80, 80); g1.output_grade(); // 점수 출력 g2.output_grade(); } }
식별자
- 프로그래머가 작명하는 이름
클래스, 변수, 메소드. 레이블 등의 이름
1 2 3 4 5 6 7
public class HelloApplication { static String szMsg = "Hello, Java!"; public static void main(String args[]) { int nTest = 0; System.out.println(szMsg); } }
- 식별자 작명 규칙
- 대소문자 구분
- 길이에 제한 없음
- 영 대소문자, 한글, 숫자, _, $ 사용
- 숫자로 시작할 수 없음
- 키워드, 예약어(true, false, null) 불가
- ex)
2002WorldCup,my#class,class,World Cup,lee@knou
- 식별자를 만들 때의 관례
- 클래스
- 첫 자는 대문자, 단어의 첫 글자는 대문자, 나머지는 소문자
- ex) Car, HelloWorld, MyClass, String
- 메소드, 변수(필드)
- 위와 같으나 첫 글자가 소문자
- ex) speed, myCar, gearArea()
- 상수
모든 문자를 대문자로 표기하고 단어 사이에 _ 넣어 구분
1
static final int NUM_GEARS = 6;
- 변수
자료형을 표시하기 위한 접두어를 붙이기도 함
1
int nSpeed;
1
String szStr1;
- 클래스
키워드
키워드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volitile while
- 의미가 미리 정해진 단어
- 프로그램에서 정해진 의미로만 사용해야 함
자료형
변수의 종류와 자료형
- 변수와 자료형
변수를 선언할 때, 저장되는 값의 자료형 선언
1
int i;
- 메소드 선언 시, 파라미터와 반환 값의 자료형 선언
- 함수에서 반환하는 값이 없을 경우
void
사용
- 함수에서 반환하는 값이 없을 경우
- 자료형에 따라 적용 가능한 연산이 다름
- ex) 1 + 3 → 숫자 계산
- ex) “a” + “bcd” → 문자열 합치기
- 변수의 종류
- 데이터 필드
- 인스턴스 변수
- 클래스 정의에서 non-static이 아닌 필드
- 개별 객체가 소유하는 변수
- 클래스 변수
- 클래스 정의에서 static 필드
- 동종 객체 간 공유 변수(정적 변수)
- 인스턴스 변수
- 지역 변수
- 메소드 내부 또는 블록 내부에서 선언된 변수
- 파라미터
- 메소드 호출 시 전달하는 값 저장하기 위한 변수
- 인자, 매개변수
- ex) args
- 데이터 필드
변수의 사용 범위
- 지역 변수와 파라미터
- 선언된 곳부터 해당 블록이 종료될 때까지 유효함
- 메소드가 실행될 때 만들어지고 끝나면 없어짐
- 지역 변수는 초기 값 지정 후 사용
- 지역 변수 선언에서 접근 제어자를 사용하지 않음
- 선언된 곳부터 해당 블록이 종료될 때까지 유효함
- 데이터 필드(인스턴스 변수 or 클래스 변수)
- 선언된 클래스 내부에서 사용 가능
클래스 외부에서의 사용 가능 여부는 접근 제어자(access modifier)에 따라 다름
1 2 3
class Circle { protected int radius; }
Java의 기본 자료형과 키워드
Java의 기본 자료형과 키워드
분류 키워드 길이 (byte) 값의 범위 문자 char 2 \u0000
~\uFFFF
논리 boolean 1 true 또는 false 정수 byte 1 -128 ~ 127 정수 short 2 -32768 ~ 32767 정수 int 4 -2^31 ~ 2^31-1 정수 long 8 -2^63 ~ 2^63-1 실수 float 4 (+/-) 약 1.4E-45 ~ 3.4E38 실수 double 8 (+/-) 약 4.9E-324 ~ 1.8E308
리터럴
- 상수
값이 한번 할당되면, 값을 변경할 수 없는 변수
1
final int nConst = 3; //선언시 초기 값 지정
- 리터럴
- 소스 코드에서 사용되는 실제 데이터 값
- 정수형 리터럴
- byte, short, int 또는 long형의 실제 값
- 소문자 l이나 대문자L로 끝나면 long형, 나머지는 int
- byte와 short는 허용 범위 안에서 int와 호환
- ex) 26L, 26, 0b11010(2진수), 032(8진수), 0x1a(16진수)
- 실수형 리터럴
- 소수점이 있는 숫자
- f나 F로 끝나면 float형, 나머지는 double형
- ex) 123.4f, 123.4, 1.234e2
- 문자형 리터럴
- 1개의 문자를 표현하고 16비트 UNICODE로 인코딩됨
- 단일 따옴표를 사용하고 Unicode 사용 가능
- 1개 문자는 (0~65536)의 수와 호환됨
- ex) ‘\u0000’~ ‘\uFFFF’
- ex) (char)65 = ‘A’ = ‘\u0041’
- ex) ‘가’ = ‘\uAC00’
참조형
- 기본형을 제외한 모든 자료형
- 참조 값(주소 값)을 가지는 자료형
- 참조형 변수는 객체를 가리키는 변수로 객체의 주소 값(참조 값)을 저장함
- 실제 객체는 동적 메모리 공간에 저장됨
- 기본형 변수는 저장 공간에 값 자체를 저장
대표적 참조형은 배열, 클래스, 인터페이스, 열거형 등
1 2 3
int anArray[]; Circle myCircle; String szStr;
자료형의 변환(형변환)
- 묵시적 자료형의 변환
- 작은 타입에서 큰 타입으로는 자동 형변환
- byte → short → int → long → float → double
- 개발자 → 직원 → 인간 → 포유류
1 2
double d = 5; // 대입문 // 5.0 자동 형변환 되어 대입
1 2
System.out.println("j=" + 10); // 수식 // 숫자 10이 문자열 10으로 자동 형변환
1 2
double res = Math.sqrt(2); // 메소드 호출 시 인자의 유형 // 2.0으로 자동 형변환
- 작은 타입에서 큰 타입으로는 자동 형변환
- 명시적 자료형의 변환
- 큰 타입에서 작은 타입으로 변환할 때 명시적 형변환 필요
- 강제적 형변환
문법 : (자료형)피연산자
1
float f = (float)5.5; // double형 실수 float형 실수로 명시적 형변환
연산자와 제어 문
연산자
- 특정 연산을 수행하기 위한 기호
- 연산자는 우선 순위가 있으며, 적용 방향이 있음
연산자의 종류
연산자의 종류
구분 연산자 예 산술연산자 +
-
*
/
%
단항연산자+
-
++
--
비교연산자 >=
~
<=
==
!=
instanceof
논리연산자 &&
\|\|
단항!
삼항?
:
&
\|
^
비트연산자 비트논리 &
\|
^
~
비트이동<<
>>
>>>
대입연산자 +=
-=
*=
/=
%=
&=
^=
\|=
>>=
<<=
>>>=
형변환연산자 (자료형) 기타 []
()
.
명령 행 매개변수
명령 행 매개 변수
- 프로그램을 실행할 때 전달하는 인자
main()
함수에 전달되는 인자문자열로 전달됨
1
java CommandInputTest Kim 123
1 2 3 4 5 6 7
public class CommandInputTest { public static void main(String args[]) { // 매개변수 빈칸으로 구분 System.out.println(args[0]); int n = Integer.parseInt(args[1]); // 문자열을 integer 형식으로 변환 System.out.println(n); } }
1 2 3 4 5
public class Main { public static void main(String args[]) { System.out.println(args[0] + ", " + args[1]); } }
문장의 종류
- 수식 문
- 수식은 변수, 연산자, 함수 호출 등으로 구성되며, 결과 값을 계산함
대입문, 증가문, 함수 호출문, 객체 생성문 등
1
a = b; // b의 값을 a에 대입
1
a++;
- 변수 선언문
- 제어 문
- 선택문, 반복문, 점프문
- 실행의 흐름 제어
- 기타
- 블록문
- 여러 문장을 중괄호로 묶은 것
{
…}
- 레이블문
레이블:
문장
- 예외처리문
try-catch
문
- 동기화문
synchronized
문
- 블록문
제어 문
- 프로그램의 실행은 기본적으로 위에서 아래로 순차 실행
- 제어 문은 실행 흐름을 바꿈
- 제어 문의 종류
- 선택 문
- 조건에 따른 문장의 선택
if
문,switch
문
- 반복문
- 조건에 따른 문장의 반복
for
문,while
문,do-while
문
- 점프 문
- 분기 문
return
문,break
문,continue
문
- 선택 문
선택 문
if
문if
(boolean-수식) 문장
if-else
문if
(boolean-수식) 문장else
문장
if와 else의 짝짓기
1 2 3 4 5 6 7 8
int a = 2; int b = 2; if (a == 1) if (b == 2) System.out.println("a was 1 and b was 2."); else // if (b == 2)와 짝지어진 else문 System.out.println("a wasn't 1.");
else
는 자기 짝이 없는 가장 가까운 if와 짝을 이룸
1 2 3 4 5 6 7 8 9 10 11 12 13 14
public class IfElse { public static void main(String args[]) { int a = 2; int b = 2; if (a == 1) { if (b == 2) { System.out.println("a was 1 and b was 2."); } } else { // if (b == 2)와 짝지어진 else문 System.out.println("a wasn't 1."); } } }
switch
문1 2 3 4 5 6 7 8 9 10 11 12
switch(n) { case 10 : System.out.println("10입니다."); break; case 20 : case 30: System.out.println("20이거나 30입니다."); break; default: System.out.println("모르겠습니다."); break; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public class SwitchTest { public static void main(String[] args) { int n = 20; switch(n) { case 10 : System.out.println("10입니다."); break; case 20 : case 30: System.out.println("20이거나 30입니다."); break; default: System.out.println("모르겠습니다."); break; } } }
- 다중 선택 구조
case
조건은 정수(long형 제외)와 호환되거나String
값default
는 생략 가능하며, 어떤case
에도 해당되지 않은 경우 매칭됨- 만족되는
case
를 실행한 후,break
문 만날 때까지 계속 실행
반복 문
for-each
문1 2 3 4 5
int[] array0fInts = {32, 87, 3, 589, 12, 1076, 2000, 8}; for (int element : array0fInts) { System.out.print(element + " "); } System.out.println(array0fInts);
1 2 3 4 5 6 7 8 9
public class ForEachTest { public static void main(String[] args) { int[] array0fInts = {32, 87, 3, 589, 12, 1076, 2000, 8}; for (int element : array0fInts) { System.out.print(element + " "); } System.out.println(array0fInts.length); // 32 87 3 589 12 1076 2000 8 } }
- 개선된
for
문 - 배열이나 컬렉션의 원소들을 차례로 다룰 때 편리
- 형식 :
for
( 변수선언 : 배열 ) { 문장 … }
- 개선된
점프 문
break
문break
문을 포함하는 가장 가까운switch
문,for
문,while
문,do-while
문의 실행을 끝냄- 반복문이나
switch
문을 빠져나갈 때 사용
- 반복문이나
- 형식 :
break;
- 레이블을 사용하면 특정 블록 또는 특정 반복문을 빠져나갈 수 있음
- 중첩
for
문에서 바깥for
문을 종료하는 경우 - 형식 :
break 레이블;
- 반복문에 레이블을 지정하려면 레이블: 반복문
- 중첩
continue
문- 반복문 안에서 사용함
- 가장 가까이 있는 반복문의 다음 반복을 위한 조건 식으로 즉시 제어를 이동하기 위한 것
- 형식 :
continue;
레이블을 사용하여 특정 반복문의 다음 반복으로 이동할 수 있음
1 2 3 4 5 6 7 8 9 10 11
public class Main { public static void main(String args[]) { int nSum = 0; my_loop: for (int i = 1; i <= 10; i++) { if (i % 2 == 0) continue my_loop; nSum += i; } System.out.println(nSum); } }
- 중첩
for
문에서 바깥for
문의 다음 반복으로 갈 때 - 형식 :
continue 레이블;
형식
- 중첩
return
문- 함수 실행 끝날 때 사용
- 형식 :
return;
- 함수 리턴 값이 존재하지 않을 경우
return 자료형값;
- 함수 리턴 값이 존재할 경우
학습 정리
- java의 기본형을 나타내는 키워드는 byte, short, int, long, float, double, char, boolean 8가지임
- 변수의 종류로는 인스턴스 변수, 클래스 변수, 지역 변수, 파라미터가 있음
- 인스턴스 변수는 객체가 소유하는 변수이며, 클래스 변수는 해당 클래스의 객체들이 공유하는 변수
- 클래스와 배열은 대표적인 참조형으로 ,참조형 변수에는 참조 값(주소 값)이 저장
- 명령형 매개 변수란
main()
함수에 전달되는 인자로서, 프로그램을 실행시킬 때 클래스 이름 뒤에 나열하는 인자를 말함 - 제어문은 프로그램의 실행 흐름을 제어하는 문장
break
문,continue
문,return
문은 제어문 중 점프 문(분기 문)에 해당
연습 문제
다음 중 클래스 이름에 해당하지 않는 것은?
a.
boolean
- 클래스 이름
Integer
String
System
- 클래스 이름
다음 정수 리터럴 중 값이 다른 하나는 무엇인가?
a. 0b0000_1010
- 2진수 10을 의미하는 정수 리터럴, 2진수 10은 10진수 2
- 모두 10진수 10을 의미하는 정수 리터럴
- 10
- 00001010
- 0x0A
위의
for
문을 향상된for
문을 이용해 다시 작성하여라.1 2 3
int[] a = {32, 87, 3, 589, 12 }; for (int i = 0; i < a.length; i++) System.out.print( a[i] + " " );
a. 답
1 2 3 4
int[] a = {32, 87, 3, 589, 12 }; for (int element : a) { System.out.print( element + " " ); }