자바란?
자바의 탄생
1995년에 썬 마이크로시스템즈에서 발표한 객체지향 언어
현재 썬 마이크로시스템즈는 오라클에 인수가 된 상태
자바의 특징
쉬운 언어이다.
C와 C++언어의 문법을 기본으로 차용하여 개발된 언어
C와 C++ 이 가진 어려운 문법인 포인터와 다중 상속 제거
C와 C++에 비해 쉬운 언어이다.
플랫폼에 독립적이다.
자바는 JVM() 만 있으면 윈도우, 리눅스, 맥등 어떤 플랫폼에서도 실행이 가능
객체지향 언어이다.
메모리 관리를 자동으로 해준다.
자바 개발순서
소스(코드)작성
작성한 소스를 컴파일
컴파일 소스를 jvm으로 실행
확장자가 바뀌지 않을때
윈도우를 사용하고 계시면
탐색기=> 메뉴 => 구성=> 폴더 및 검색 옵션 => 보기 탭에서 "알려진 파일 형식의 파일 확장면 숨기기"를 체크 해제하면
확장자명을 수정할 수 있어요. 파일 이름 변경해서 확장자를 .java 로 수정하시면 됩니다
따라해 보기
소스 작성
HelloWorld.java 파일을 c:\tmp 디렉토리에서 작성
자바는 파일 이름 중요! 대소문자를 구별하니 잘 입력해 주어야 합니다.
public class HelloWorld{
public static void main(String args[]){
System.out.println("Hello World");
}
}
컴파일
윈도 콘솔을 실행 ( 윈도우 버튼 -> 실행 -> cmd를 입력한 후 엔터를 입력)
cd c:\tmp 로 이동합니다.
javac HelloWorld.java 로 컴파일 합니다.
실행
java HelloWorld 로 실행
화면에 HelloWorld가 출력되는 것을 확인
이클립스를 이용하여 똑같이 실행해 보기
eclipse.exe를 실행
사용자 홈디렉토리 아래에 workspace 폴더를 지정
(이클립스를 처음 실행하면 워크스페이스 경로를 물어봅니다. 워크스페이스란 이클립스로 작성한 프로젝트가 저장되는 경로입니다. )
first 프로젝트 생성
소스 작성
src폴더에서 HelloWorld.java파일 생성
앞에서 만들었던 파일과 똑같은 파일을 HelloWorld.java파일로 작성
워크스페이스 경로를 파일탐색기로 열어보면 src폴더에 HelloWorld.java파일 확인 가능
컴파일
bin폴더를 열어보면 HelloWorld.class파일 생성되어있음 (이클립스는 소스파일에 문제가 없다면 자동으로 컴파일하여 bin폴더에 클래스를 만들게 됩니다.)
실행
클래스를 선택한 후 우측버튼을 클릭하고 자바 어플리케이션을 실행하는 메뉴를 선택
주석문
주석이란, 프로그램의 코드와 실행에는 영향을 주지 않는 문장
//
//
주석의 종류
구현 주석
행단위 주석 (// 를 해주면, 해당 행이 주석 처리됨 )
블럭단위 주석
/
주석으로 사용할 내용
/ )
문서화 주석
/**
변수란 ?
값을 저장할 수 있는 메모리의 공간 (값을 담고있는 그릇)
값이 변할수 있는 수 _변한값에 따라 다른 그릇을 씀
강영언어 = 모든 변수의 타입이 컴파일시에 결정이 되는 언어를 이야기함
따라서 처음 변수를 선언할 때부터 해당 변수에 어떤 데이터를 담을 것인지를 결정해야함
그러므로 알맞은 데이터만 저장할수 있다
변수의 선언
타입 변수이름;
int count; ( 정수 값을 담을 수 있는 count라는 이름의 변수를 선언)
ex) - count =10;
- count =20;
System.out.println(count);
= 20출력
마지막에 담은 값 하나만 출력됨
선언할때 부터 무엇을 담을건지 선언하고 그 정해진 값만 담을 수 있음
double average; ( 실수 값을 담을 수 있는 average 라는 변수를 선언)
명명규칙.
ex) 만약 정수의 값을 선언했는데 (int)
count = 11.1; _ 출력안 되고 에러뜸 (실수를 담았기 때문)
double avg = 11.1; _ 실수를 담을 수 있는 그릇을 선언해서 담아줘야함
변수의 이름을 정할 때 자바 언어에서 정해놓은 규칙
식별자 (identifier)는 클래스, 메소드, 변수 등 다양한 대상에 대해 이름이 붙여지는 경우. 그 이름을 뜻 함
변수의 이름은 다른 식별자의 이름을 정할때와 같음
java 식별자 명명 규칙
하나 이상의 글자로 이루어져야 함
단, 변수는 첫번째 문자가 항상 소문자이고,
두단어 이상일때 두번째 단어앞자리는 대문자
ex) int totalCount <-이런식
첫 번째 글자는 문자 이거나 '$', '_'이어야 함
두번재 이후의 글자는 숫자, 문자, '$', '_'이어야 함
'$', '_' 이외의 특수문자 사용 불가능
길이 제한이 없음
키워드는 식별자로 사용할 수 없음
상수 값을 표현하는 단어 true, false, null은 식별자로 사용할 수 없음
변수 명명 관례
첫 번째 문자가 소문자인 명사로 정함
여러 단어로 구성된 이름의 경우 두번째 단어부터 첫글자를 대문자로 함
'_'을 쓰지 않음
규칙은 반드시 지켜야 한다. 지키지 않으면 컴파일시 에러가 발생함.
관례는 지키지 않아도 컴파일에러가 발생하지는 않지만, 약속이기 때문에 지켜주는것이 좋다.
변수의 사용
변수명 = 값;
count = 10; (count 라는 int형 변수에 정수값 10을 담습니다.)
count = 20; (count 라는 int형 변수에 정수값 20을 담습니다. 원래 담겨있던 10은 없어집니다. 변수는 값이 얼마든지 변할 수 있습니다.)
average = 11.1 (average라는 double형 변수에 실수 값 11.1 을 담습니다. )
상수 =데이터를 담을 수 있는 메모리 공간
상수(常數)란 수식에서 변하지 않는 값을 의미한다._바꿀수 없음
상수의 선언
final 상수타입 상수명;
final = 변수의 마지막이란 의미, 상수를 선언할 때는 앞에 final을 넣어줘야함 뒤에 변수 처럼 넣어도 바뀌지 않음
상수의 사용
상수명 = 값;
J = 10; (J에는 값을 담을 수 있는 기회가 단 한 번만 허락됨)
ex ) final int J;
J = 10;
J = 5; _불가능
상수 명명 관례 : 대문자로만 구성된 명사로 정함 j(x) , J(o)
ex) double circleArea;
circleArea = 3 3 3.14159(π);값만 보고 뭘의미하는지 모를수도 있고 오타를 발생할수도 있는 위험성이 있음 -> 상수를 하나 선언해 주는게 좋음
↓
final duble PI = 3.14159; 타입명 적어줘야함
circleArea = 3 3 PI; _이렇게 쓰는게 더 안전하고 좋음
숫자가 뭘 의미하는지 읽어내기 좋음
값만 봤을때 뭘 의미하는지 모르겠을때는 명명해두면 됨
ex ) 기름 값을 가지고 뭔가 프로그램이 수행되는 경우
기름값음 = 1450원 이라 했을 때
final int OIL_PRICE = 1450;
int totalPrice = 50 * OIL_PRICE;
같은 값을 이용할수 있고, 중복적으로 OIL_PRICE 가 사용 됬는데 값을 변경하고 싶으면 상수 하나만 변경하면 됨, 나머지 적용된 변수들이 값을 자동으로 바꿈
final int OIL_PRICE = 1350;
상수는 변수와 다르게 여러 단어로 구성된 이름의 경우 단어 사이에 '_'을 써서 구분함.
상수를 사용해야 하는 경우
값이 변하면 위험한 경우에 상수를 사용 _지정해 묶어두는 것
값만 봤을때 무엇을 의미하는지 쉽게 파악할 수 없는 값에도 값 자체를 사용하기 보다는 상수를 사용
논리형(=불린형=boolean)
논리형은 크기가 1byte이고 true와 false 중에 한 가지 값을 가질 수 있다.
ex ) boolean isFun = true;
문자형
문자형은 char로 2byte크기를 가집니다. 문자는 작은따옴표를 이용하여 한 글자를 표현할 수 있다.
ex) char c ='f';
정수형
정수형은 정수를 표현하는 데이터 타입인데 표현할 수 있는 정수의 범위에 따라서 다양하게 제공된다.
byte = 1byte , 범위 : -128 ~ 127
short = 2byte, 범위 : -32768 ~ 32767
char = 2byte, 범위 : 0~65, 535
int = 4byte, 범위 : -2147483648~2147483647
long = 8byte, 범위 : ...int보다 더~ 많은값을 나타낼수 있음
ex) byte b =89;
short s = 32760;
char c = 64;
int x= 59; int z = x;
long big = 3456789L;
정수형에서 가장 자주 사용하는 int
long형은 int 보다 더 큰 범위의 정수를 표현하고 싶을때 사용한다.
(long에 값을 대입할 때는 실수 뒤에 소문자 l이나 대문자 L을 붙여야 합니다.)
실수형
실수형은 크기에 따라 float과 double형이 있다.
float은 4바이트, double은 8바이트로 double은 float보다 더 큰 범위의 실수를 표현할 수 있다.
float 범위 : , double
ex )
float f = 32.5f (float에 값을 대입할 때는 실수 뒤에 소문자 f나 대문자 F를 붙여야 합니다.)
double d = 23.34;
리터럴 = 일종의 값
컴퓨터 과학 분야에서 리터럴이란, 소스 코드의 고정된 값을 대표하는 용어다.
정수리터럴, 실수리터럴, 문자리터럴, 논리 리터럴
리터럴은 특정타입의 변수에 대입 할수 있다
true, false, 10, 11.1, a 등 이런 값 자체를 리터럴이라고 한다.
ex)
boolean isFun = true;

기본형 타입변환
정수는 실수에 포함되어 있는 그림
자바는 기본형으로 정수와 실수타입을 제공함
타입마다 크기가 다름
byte < short < char < int < long < float < double
실수는 소수점 뒤에 있는 자리수 들이 필요하지만, 정수는 소숫점 뒤를 담을 수 있는 공간이 없음
그래서 실수가 조금 더 큼
기본형 타입(형)변환
형변환이란, 변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것이다.
묵시적 형변환
크기가 작은 타입을 크기가 더 큰 타입으로 바꿀 때에는 묵시적으로 형을 바꾸어 준다.
ex)
int x = 50000;
long y = x; _ 가능
이를 암묵적(묵시적) 형변환 이라고도 한다.
명시적 형변환
크기가 더 큰 타입을 작은 타입으로 바꿀 때에는 명시적으로 변환 해주어야 한다.
= 크기가 큰 타입에 작은 값이 들어 있다면 작은크기의 타입으로 형변환이 가능
ex)
long x2 = 5;
int y2 = x2 에러 : 컴파일러가 모르기 때문
int y2 = (int) x2; 가능 : 뭘로(int) 바꾸는지 선언해줘야함
long x = 50000;
//int y = x; (이렇게 묵시적으로 수행하면 컴파일러는 오류를 발생 시킨다.)
int y = (int) x; (반드시 (타입) 으로 명시적으로 형을 바꾸어 주어야 한다.)
이를 강제 형변환 이라고도 한다.
연산저와 연산식
연산은 데이터를 처리하여 결과를 산출하는 것
x = y+z;
y와 z를 더한 값을 x에 대입한다는 것을 의미
=과 + 는 연산자 = 은 대입연산자 이고, + 산술연산자 이다.
y와 z 는 피연산자 이다.
x = y+ z 는 연산식이다.
연산자(operations) : 연산에 사용되는 표시나 기호 (+,-,*,/,%,=...)
피연산자 (operand) : 연산대상이 되는 데이터 (리터널, 변수)
연산식(expressions) : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것
연산자
부호연산자 (+ -) : 부호를 결정
산술연산자 (+ - * / %) : 산술 연산을 할 수 있음
%(모듈로) 는 나눈 나머지 값을 구하는거
증감연산자 (++ --) _1씩 증가하거나 1씩감소시키는거
단항연산자 : 피 연산자가 한개의 연산을 함
-> 부호연산자와 증감연산자가 이에 속함
ex)
부호 연산자
int i1 = -5; -> 출력값 : -5
int i2 = +i1; -> 출력값 : -5 _변수 앞에 +부호연산자가 붙으면 + -를 바꿔주는게 아님 +는 부호비트를 그대로 유지 -가 -는+로, +는 -로 바꿔주는 역활을 함
int i3 = -i1; -> 출력값 : 5
증감 연산자
int i4 = ++i3; -> 출력값 : 6 ( i3(5) + 1 )
int i5 = i3++; -> 출력값 : 6 (++뒤에 붙어 있으면 원래값을 출력 후 +1됨) 이후 i3출력시 7
int i6 = --i3;
int i7 = i3--;
피 연산자 하나로 연산할 수 없는 연산자 : 이항 연산자
int i = 5;
int j = 2;
2개의 변수 이용한 산술 연산
System.out.println(i + j); -> 출력값 :7
System.out.println(i - j);-> 출력값 : 3
System.out.println(i * j); -> 출력값 :10
System.out.println(i / j); -> 출력값 : 2 몫만 출력 (정수끼리의 연산은 정수 값으로만 출력, 소수까지 출력할려면 피연산자 중 하나는 최소한 실수여야 소숫자리까지 출력가능
System.out.println(i / (double) j); -> 출력값 : 2.5 (둘 중 하나(j)를 실수로 강제형변환해서 실수값 출력 함)
System.out.println(i % j); -> 출력값 : 5 나머지 출력
비교연산자
== : 같다
!= : 다르다
< : 크다
: 작다
<= : 크거나 같다
= : 작거나 같다
비교 연산자의 결과는 boolean이다 _ true, false
ex)
int i = 10; // = 단순대입연산자
int j = 10;
// i 와 j 가 같은지 비교 하는 비교 연산자
System.out.println(i == j ) -> 출력값 : true
System.out.println(i != j ); -> 출력값 : false
System.out.println(i < j);-> 출력값 : false
System.out.println( i <= j);-> 출력값 : true
System.out.println(i > j);-> 출력값 : false
System.out.println(i >= j);-> 출력값 : true
단순대입연산자 : 오른쪽에 있는 피연산자의 값을 왼쪽 피연산자의 변수에 저장
ex ) int i = 10;
복합 대입 연산자 : 정해진 연산을 수행한 후에 결과를 대입
ex )
i += 10; // i = i + 10; 과 같은 의미
System.out.println(i); -> 출력값 : 20
System.out.println(i -=5); -> 출력값 : 15
System.out.println(i); -> 출력값 : 15
연산자 우선순위 : 어떤 것 부터 계산해야하는지
단항연산자 : ++ -- ! ~ +/- (부정, bit변환>부호>증감)
->++ -- 는 전위연산자 이냐 후위 연산자에 따라 다름
산술연산자 : * / % + - > 시프트(shift)연산자 >>,<<,>>>
비교연산자 : > < >= <= == !=
비트연산자 : & | ^ ~
논리연산자 : &&(and연산자) ||(or연산자) !
-> && 와 || 연산자가 같이 나오면 &&연산자부터 계산
삼항연산자 (조건식) ? :
대입연산자 : = *= /= %= += -=
곱셈이 우선순위가 높기 때문에 b와c를 먼저 곱한다.
그런 다음 a에서 b와 c를 곱한 값을 뺀다.
괄호가 있으면 괄호를 먼저 계산 후 출력
ex)
int a = 5;
int b = 10;
int c = 15;
System.out.println( a - b c ); ->출력값 : -145
System.out.println( (a - b) c ); ->출력값 : -75
비교연산자(>)가 논리 연산자(&&, ||) 보다 우선순위가 높다.
ex)
System.out.println( a > 5 && b > 5 ); ->출력값 : false ( true &&(and) false = 두 값다 true가 나와야 출력값이 true )
System.out.println( a > 5 || b > 5 ); ->출력값 : true ( true &&(and) false = 하나만 true가 나와도 출력값이 true )
증감 연산자일 경우에 전위 연산자인지 후위 연산자 인지에 따라서 우선 순위가 바뀔 수 있다.
단항 연산자이면서, 전위 연산자인 ++ 가 먼저 연산된다.
ex)
int a = 5;
System.out.println(++a - 5); _증감연산자
//->출력값 : 1 ( a가 6으로 바뀐 후 5 를 뺌)
System.out.println(a);
//->출력값 : 6
단항 연산자이면서, 후위 연산자인 ++ 가 나중에 연산된다.
논리연산자 중 and 연산과 or 연산이 나왔을 경우 and 연산이 먼저 수행 됩니다.
ex)
int a = 5;
System.out.println(a++ - 5); _후위연산자
//->출력값 : 0 (a가 5인 상태에서 5를 뺀 후에 a++(a=a+1) 이 실행되므로 출력결과는 0)
System.out.println(a);
//->출력값 : 6
if문