
프로그래밍 언어 ( progrming language ) 로 컴퓨터 프로그램 ( 어플리케이션 ) 을 만드는 데 사용.
실행환경 ( JRE ) + 개발도구 ( JDK ) + 라이브러리 ( API )
배우기 쉬운 객체 지향 언어 : 프로그래밍 언어 + 객체 지향 개념
자동 메모리 관리 : 가비지 컬렉터 ( GC ) 이용
멀티 쓰레드 지원
풍부한 라이브러리로 쉽게 개발 가능
운영체제에 독립적 : 자바로 작성된 프로젝트는 자바 가상 머신 ( JVM ) 에 의해 여러 운영체제에서 사용될 수 있어 이식성이 높다. ( 한 번의 컴파일로 window, Linux, IOS 모두 실행 가능 )
객체 지향 언어 ( Object Orient Language )
남의 소스를 부품처럼 사용하기 위해 생긴 개념. 하드웨어의 발전 속도에 소프트웨어가 따라가지 못하여 ( 소프트웨어 위기 ) 좀 더 빠르고 편리하게 개발하기 위하여 누군가 공개한 내용을 가져다 쓸 수 있게 만들어 놓은 프로그래밍 언어이다. 그래서 JAVA 는 남의 것을 편하게 쓸 수 있도록 설계되어 있다.
자바 프로그램이 실행되는 가상 컴퓨터 ( Vertual Machine )
한 번 작성하면 어디서든 실행이 가능하다.
일반적인 어플리케이션은 OS 위에서 실행이 되는데 자바 어플리케이션은 JVM 위에서 실행되기 때문에 OS 와 독립적이다.
프로그램 개발에 관련된 모든 작업 ( 코딩, 컴파일, 실행, 배포 ) 을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어
( ex ) Eclipse, Intelli J, NetBeans etc...
하나의 값을 저장할 수 있는 메모리 공간 ( RAM )
JS 의 변수와 다르게 용도와 크기 ( 타입 ) 에 맞게 지정해줘야 한다.
값을 저장할 공간을 마련하기 위해서 선언한다
그리고 선언된 변수 이름에 값을 저장한다.
변수타입 변수명;
변수명 = 값;
( ex ) int age;
age = 20;
위 두 줄을 하나로 작성도 가능하다.
int age = 20;
변수에 처음으로 값을 저장하는 것
그 중 지역변수는 실행 전에 꼭 초기화를 해줘야 한다. ( 컴파일 시 에러 발생 )
오직 8개 ( boolean, char, byte, short, int, long, float, double ) 이다.
실제 값을 저장한다.
| 종류/크기 | 1byte | 2byte | 4byte | 8byte |
|---|---|---|---|---|
| 논리형 | boolean | |||
| 문자형 | char | |||
| 정수형 | byte | short | int | long |
| 실수형 | float | double |
( 4byte는 32bit 8byte는 64bit )
boolean : true / false 에 사용char : 하나의 문자를 저장하는데 사용byte : 이진 데이터를 다루는데 사용 short : c 언어와의 호환을 위해 추가됨 ( 잘 안쓰임 ) int : 정수 값을 저장 ( 정수형의 defalut 타입 )long : 아주 큰 정수 값을 저장float : 실수 값을 저장 ( 3.14f 와 같이 f 를 붙여줘야 함 )double : float 보다 정밀도가 더 높음 ( 실수형의 defalut 타입 )btye b = 3; 이면 3이란 리터럴이 2진수 8자리로 변환되어 저장

n bit로 표현할 수 있는 값의 개수 : 2^n 개
n bit로 표현할 수 있는 부호없는 정수의 범위 : 0 ~ 2^n - 1 까지
n bit로 표현할 수 있는 부호있는 정수의 범위 : -2^n-1 ~ 2^n-1 - 1 까지
( 0 을 포함해서 2^n -1개이다 )
( 1bit 는 -,+ 부호에 쓰여서 7bit 까지만 사용 )
byte : -128 ~ 127 까지 ( -2^7 ~ 2^7 -1 )short : -32768 ~ 32765 까지 ( -2^15 ~ 2^15 -1 )char : 0 ~ 65535 까지 ( 0 ~ 2^16 -1 )int : -20억 ~ 20억 까지 ( -2^31 ~ 2^31 -1 )long : -800경 ~ 800경 까지 ( -2^63 ~ 2^63 -1 )( 실수형은 1bit : 부호 / 8bit : 지수 / 23bit : 가수 로 표현 )
float : 1.4E-45 ~ 3.4E38 로 오차 없는 정밀도는 7자리 이다.double : 4.9E-324 ~ 1.8E308 로 오차 없는 정밀도는 15자리 이다.기본형을 제외한 나머지 ( String, System etc )
메모리 주소를 저장 ( 4byte 또는 8byte )
( ex ) Date today = new Date(); --> 참조형 변수 today에 객체의 주소를 저장
1byte -> 8 bit
한번 지정되면 프로그램 종료 시까지 변경이 불가능하다.생성자에서만 초기화가 가능하다.모든 인스턴스에 대해 동일한 값을 설정할 때는 static final을 사용한다. ( 메소드 영역 )static final int MAX = 10; 과 같이 변수명은 대문자 를 사용한다.Child.MAX 과 같이 원본 클래스에서 접근해야 한다.값을 의미 ( value ) ( 기존의 상수 )
( ex ) false / true / 'A' / "String" / 3 / 3.14f / 3.1456
byte와 short 변수에는 int 리터럴이 저장 가능하다.
char ch = 'A'; // OK
char ch = 'AB'; // Error
char ch = ''; // Error
String s ="ABC";
String s = new String("ABC");
String s = ""; // 빈문자열도 OK
String s = "A" + "B"; // "AB" 가 저장됨
String s = 7 + ""; // 숫자 7 + 빈문자열 = 문자열 "7" 로 저장
( 문자열 + any type -> 문자열로 형변환 )
( any type + 문자열 -> 문자열로 형변환 )
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
int i = Integer.parseInt("3"); // 만일 ("자바")를 넣으면 Error
double d = Double.parseDouble("3.14"); // 3.14
String str = "3";
str.charAt(0); // '3'
( 타입 ) 피연산자 로 형변환 가능
큰 타입 -> 작은 타입으로 넘길 시, 값손실이 발생하기 때문에 명시적으로 형변환을 시켜줘야 한다.
double d = 85.4;
int score = (int)d; //double 타입의 변수 d 를 int 타입에 집어넣기 위해 형변환
// int score = 85; 로 저장이 된다.
// 변수 d 의 값은 그대로 85.4 로 남아있음
int -> char : (char)65 -> 'A' ( 'A' 의 유니코드는 65 )char -> int : (int)'A' -> 65float -> int : (int)1.6f -> 1 ( 반올림되지 않음 )int -> float : (float)10 -> 10.0f 컴파일러가 자동으로 형변환 시켜줌 ( 자동 형변환 )
( 값손실이 일어나는 것은 ( type ) 로 명시해주어야 한다. )
byte > short > int > long > float > double
char
( short 와 char 은 묵시적 형변환이 되지 않는다 )
byte b = 100; // 100 은 int 지만 컴파일러가 자동 형변환 시켜줌 (예외)
// 100이 -128~127 사이의 값이라서 가능
byte b = 1000; // Error -128~127 사이의 값이 아님
byte b = (byte)1000; // OK 그러나 값손실 발생해서 -24가 저장
int i = 100;
byte b = i; // Error 앞의 100은 리터럴(상수)라서 OK
byte b = (byte)i; // 여기서 i 는 변수라서 형변환시켜줘야 함
연산자 : 연산을 수행하는 기호 ( +, -, *, /, % etc )피연산자 : 연산자의 연산 수행 대상연산은 피연산자들을 연산자를 통해 계산하는 것이다.
모든 연산자는 연산 결과를 반환한다.
단항 연산자 : 부호연산자 ( +,- ), 증감 연산자 ( ++ , -- ), 논리부정 연산자 ( ! )이항 연산자 : 나머지연산자 ( % ), 사칙 연산자 ( +, -, *, / ), 비교 연산자, 논리 연산자 ( &&, || )삼항 연산자 : 조건 ? 맞으면 : 틀리면외 etc
전위형 : 먼저 증가한 뒤 기능을 실행 ( ++i , --i )후위형 : 기능을 실행한 후 증가 ( i++, --i )연산 전에 피연산자의 타입을 일치시키는 것
( 보다 큰 타입으로 일치 )
long + int -> long + long
float + int -> float + float
double + float -> double + double
( int 보다 작은 타입은 int 로 변환 )
byte + short -> int + int
char + short -> int + int
그래서 문자형 <-> 숫자 형변환 시
'3' - '0' -> 51 - 48 -> 3 순으로 문자가 숫자로 변환된 것.
실수를 소수점 첫 째 자리에서 반올림한 정수를 반환
long result = Math.round(4.52); // 5 반환
// 파이의 소수 3번째 자리까지만 보고 싶을 때
double pi = 3.141592;
double shortPi = Math.round(pi * 1000)/1000.0;
// 3141.592 에서 3142 반환한 뒤 다시 1000.0 으로 나누어 3.142 저장
// 3.141 은 (int)(pi*1000)/1000.0 으로 가능함
문자열 비교에는 == 대신 equal() 로 비교해야 한다.
== : 참조 비교equals() : 내용 비교// String 리터럴로 생성 시 String Constant Pool 에 저장되어 이곳에서 재사용 가능
// 이 때는 s1 == s2 로 사용해도 true 가 됨.
String s1 = "abc";
String s2 = "abc";
// new String(); 으로 String 객체 생성 시에는 s1 과 s2 는 별도의 복사본을 가짐
// 이 때는 s1 == s2 사용해도 false 가 됨.
String s1 = new String("abc");
String s2 = new String("abc");
//equal() 사용하면 true 반환
boolean true = s1.equals(s2);
|| : 또는 ( or )&& : 그리고 ( and )! : 앞에 붙여주면 true -> false 와 같이 반대로 바꿔줌 ( not )10< x < 20 과 같은 연산은 가능하지 않음 -> 10 < x && x < 20 로 연산 가능
조건식 ? 식1 : 식2
조건식 이 true 면 식1 반환 / false 면 식2 반환
삼항연산자는 if 문을 간단히 쓸 수 있게 고안된 것.
i += 3; // i = i + 3;
i -= 3; // i = i - 3;
i *= (10 + j); // i = i * (10 + j);
감사합니다. 이런 정보를 나눠주셔서 좋아요.