
사람과 컴퓨터 사이의 소통을 위해 사용
0, 1만을 인식
A 언어 : 첫 개발언어라는 의미에서 A Programming Language의 약자
시스템 : input ==> System ==> output
동일한 input에 동일한 output
B 언어 : Bell 사에서 개발해서 B언어
A언어의 기능 + 기계식 데이터 타입 , 연산 기능 , 메서드
C 언어 : B언어에 비해 더 좋은 언어라는 의미로 C언어
Java 언어
어디서나 마시는 커피처럼, 어디서나 동작하는 Java
1990년대 발표
C언어 기능 + 공통 실행환경(JVM) + 클래스 / 객체
객체 지향 언어!
객체 지향 : object (세상에 존재하는 모든 것)
=> 특징과 행동 포함
안정성이 높기에 프로그래밍 오류를 방지하고, 보안상 안전
대규모 앱 개발 가능
다양한 개발 도구와 라이브러리
자바 가상 머신 : 여러 가지 기기 위에 Java프로그램을 실행시킬 수 있는 가상의 기기
바이트 코드
소스 코드를 Java 컴파일러가 변환한 코드
ex) Hello.java --> 컴파일러 --> Hello.class
인터프리터
운영체제가 읽은 바이트코드를 기기가 실행할 수 있는 기계어로 번역
Hello.class 코드 해석기
JIT 컴파일러
인터프리터의 효율을 높여주는 서포터 해석기
메모리 영역
Java 데이터를 저장하는 영역
운영체제로부터 JVM이 할당받은 메모리 영역
클래스 로더
Java.class 바이트 코드를 메모리 영역에 담는 운반기
JVM으로 class(바이트코드)를 불러와서 메모리에 저장함
가비지 컬렉터
Java 쓰레기 청소기
JRE (Java Runtime Environment)
자바 실행 환경
class 실행만 가능
JDK (Java Development Kit)
자바 개발 키트
JRE(JVM) 기능을 포함
디버깅 기능
.java 파일을 생성 -> public class Main (class라는 키워드를 통해 컴파일)
자바 프로젝트(앱)는 제일 먼저 클래스의 main 메소드를 실행시킨다.
public class Main {
public static void main(String[] args) {
System.out.println("Our First Project!:)");
}
}
public - (접근) 제어자
static - 프로그램이 시작될 때 무조건 실행
void - 메서드의 출력값 데이터 타입 (없음)
String[] args : 매개변수 자리
객체 : 특징(속성, 변수) / 행동(메소드)
변수 : 변하는 저장공간
상수 : 변하지 않는 저장공간
논리형 변수 : boolean - true / false
문자형 변수 : char - 문자 하나만 저장
정수형 변수 : byte, short, int, long
실수형 변수 : float, double
float는 4byte 사용 but! long보다 더 넓은 범위를 표현
why? 자바는 소수를 표현할 때, 부동소수점 방식을 채택
부동 소수점 방식 : 가수와 지수를 구분해서 저장하고, 이 값들을 곱한 값을 저장(표현)하는 방식
부호( + - ) / 지수 (1byte) / 가수 (3byte)
문자열 변수 : String
그 외 : Object, Array, List ... (객체, 배열, 리스트)
래퍼 클래스 변수 : 기본형 변수를 클래스로 한번에 랩핑(감싼)한 변수
why? Wrapper Class 가 갖는 유용한 기능을 사용할 수 있음
ex) int number = 21; ----> Integer num = new Integer(number);
참조형
참조형은 복잡한 저장형태이므로, 별도의 공간에 저장
주소형 변수 -> 원본값의 주소값을 저장
메모리 영역
Stack 영역 / Heap 영역
비트 & 바이트
Byte 는 8개의 bit로 구성
Bit = 0, 1 형태의 2진수로 표현
A 는 65 => 2진수로 0100 0001 8비트(1바이트)로 문자 표현
형변환
작은 크기의 타입이 큰 크기의 타입과 계산될 때, 자동으로 큰 크기의타입으로 형변환된다.
크기 순서 : byte - short - int - long ( 1 - 2 - 4 - 8 )
float - double
자동 형변환 : 작은타입에서 큰 타입으로 형 변환시 값의 손실이 없으므로 컴파일러가 자동으로 형변환
강제 형변환 : 더 작은 표현범위를 가진 타입으로 변환되는 것이라 값이 손실
연산자
산술 연산자 : + , - , * , / , % , << , >>
비교 연산자 : > , < , >= , <= , == , !=
논리 연산자 : && , || , !
대입 연산자 : = , ++ , --
주의할 점! ++i / i++ 연산이 된 뒤에 더해지는지 확인
복합 대입 연산자 : += , -= , *=
기타 연산자 : (type) 형변환 , ? : , instance of
삼항연산자 : 비교연산자와 항상 함께 쓰인다.
조건 ? 참 : 거짓 ==> boolean b = (x == y) ? true : flase;
String s = (x != y) ? "정답" : "오답";
instance of : 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여 맞으면 true / 틀리면 false
연산자 우선순위 : 산술 > 비교 > 논리 > 대입
연산자 여러 개가 함께 있는 연산을 계산할 때의 우선순위
단, 괄호로 감쌌을 경우, 최우선 순위로 계산