자바 실행환경
- 하이브리드 언어
- compile과정 + interpreter 방식: 컴퓨터에게 요청(coding) + 통역(compiling) + 결과실행(interpreting)
- 언어 해석방식: 컴파일
- 코딩본을 "한번에 번역"(cmd → javac): Java compiler → JVM(Java Virtual Machine)의 바이트 코드 해석(반기계어 .class 파일)
- 실행방식: 인터프리터
- 자바 바이트코드: JVM(cmd → java)에서 "한 줄씩 실행
자바 개요 및 특징
- 기원: c++기반 가전제품 이용 목적 언어 개발
- 장점
- c의 포인터 개념 → 객체의 동적 메모리 할당 방식 대체 & 순수 객체지향 개념 사용 ∴ 보안강화
- 특정 시스템의 연관 관계 무배정: Class 형태 파일(현재 시스템의 기본정보 미포함) 사용 ∴ 플랫폼 독립적(OS, 운영체제)
- 코드 재사용성: 방대한 양의 API보유 ∴ 편의성 제공
- 특성
- 이식성
- 한 번 코딩된 컴파일 상태의 클래스 파일을 "수정과정 없이" JVM가 설치된 시스템에서 실행 가능
- 외부 포인터 X, 내부 포인터 사용
- 포인터 변수(ex. c - int*, char*)제거 → 내부적 객체 메모리 할당시 "무조건 동적 메모리 할당"방식을 취함 ∴보안 상 안전성 고려
- 완벽한 객체지향적 언어
- 클래스 기반: package, impoer 타 클래스를 제외한 클래스 없는 코딩된 파일은 컴파일 시 에러 발생
- ex. Wrapper 클래스 사용, 강력한 입, 출력(IO), 멀티스레드, RMI 등
- 이식성
- JVM
- 메모리상에만 존재하는 가상 컴퓨터
- 소스코드 컴파일 → 바이트 코드 변환
- 바이트 코드 해석 → 각 메모리에 배치
- 스택영역(Runtime Stack)
- 바이트 코드를 읽어 자바의 로컬 변수 할당
- 선언된 블록 영역 이탈 시 메모리 소멸
- 초기화 작업 필수
- 동적 할당 메모리 영역(Garbage Collection Heap)
- 배열로 만들어진 연속된 공간, 클래스 포함 멤버 할당
- Gargbage Collector에 의해 관리
- 초기화 디폴트값
- 상수, 메서드
- 고정 데이터인 상수:final 키워드 초기화, 추상화 형식인 메서드
- 실행 시 위치값 有: 내용 기억 필수
- 해킹에 안정적: 위치가 조건에 따라 결정되지 않음
- Register 영역
- JVM 실행시 필요한 부분의 주소 기억
- 각 영역을 연결해 프로세서 작동 시 기초 실행
- 스택영역(Runtime Stack)
- Eclipse
- 파일 경로 설정
- File > New > Java Project
- File name == Class name(public 예약어 사용)
- File > New > Class
- Run > Run As > Java Application 결과 출력
- main메서드
- 코딩 규칙(컴파일러의 프로그램 인식 순서): package > import > class
- import: 현재 파일에서 사용하고자 하는 클래스 → JVM전달(≒#include)
- package: 클래스 기반 → 비슷한 유형 그룹화 (Sun)
- class: public 예약어 사용 클래스는 한 파일 당 한 클래스에만 기입
- main(): public static void main (String[] args())
- 약속
- 사용자 정의 명칭 규칙
- class, method, field: 첫 글자 '$', '_', 영문자 대, 소문자
- 글자수 제한 x
- 공백문자 미 포함
- 특수문자 x
- 숫자 첫 글자 x
- 예약어 x (ex. this, if, for, abstract ,,,,)
- 코딩 규칙
- Class: 첫 글자 '$', '_', 영문자 대문자
- Method: 첫 글자 '$', '_', 영문자 소문자
- Field: static, final 필드만 대문자, 나머지 소문자
- 합성어 첫 글자 대문자
- 사용자 정의 명칭 규칙
문법과 자료형
- 주석처리: 프로그램 실행 중 영향 x, 설명문(/* */, //, /** ~*/)
- 멤버: 집합(Class → field, constract, method)멤버 구성요소
- 참조 연산자('.'): 모든 멤버 연결
- static: 클래스명으로 접근 가능한 멤버 == 전부 static
- ex. System(클래스명).out(static선언).println
- 상수(유지), 변수(변화), 자료형(유동적 데이터를 저장할 수 있는 크기를 규정한 형태)
- 논리형 자료형: boolean
- 정수형 자료형: byte, char, short, int, long
- 실수형 자료형: float, double
- 클래스형 자료형: String → 프로그램이 필요로 하는 매개변수 전달
- cf) 자료형 종류: 기본형(논리, 정수, 실수형)+ 레퍼런스형(배열, 클래스, 인터페이스)
- cf)오버플로와 언더플로우: 정해진 자료형 값을 넘어선 값 저장 → 값 회귀현상
- ex. 1 byte == 8 bits(8칸, 0000~1111)→ -128~127을 넘어선 수 정의
- 자료형 변환
- 특정 자료형의 값을 다른 자료형에 대입(boolean, String 형변환 x)
- 종류
- 자동형변환: 작은 자료형 → 큰 자료형 (메모리 낭비, 형변환 필요 x)
- 강제형변환: 큰 자료형 → 작은 자료형 (ex. byte b = (byte) n ) → 명시 필요
- 은닉화
- OOP 中 은닉화(private 접근제한자): prototype 자료형 메모리 바이트 조사시
- Boolean, Character, Short, Integer, Long, Float, Double: 자료형 대체(항상 4byte → 레퍼런스 자료형)
- ☆boolean 제외 MAX_VALUE, MIN_VALUE 멤버 有
- 초기화
- 필드 선언
- Runtime Stack: 지역변수 메모리 할당
- Garbage Collection Heap: 멤버 변수 메모리 할당
- 필드 선언
입, 출력
- System 클래스: 입력(System.in == inputStream / System.out == outputStream)
- Field
- in: InputStream과 연결된 객체, 키보드 입력 처리
- out: PrintStream과 연결된 객체, 콘솔 출력 처리
- err: PrintStream과 연결된 객체, 콘솔 출력 中 에러 관련 처리
- Method
- ex. int nextInt(): 다음 토큰 int 타입으로 리턴
- Scanner
- 키 입력을 용이하게 하는 클래스
- Scanner scanner = new Scanner(System.in) → scanner.close();
- System.in(바이트 표준 입력 스트림) → scanner(정보 입력 받기) →(타입변환)→ program
- import java.utill Scanner; 클래스 사용
- Field
- 입력: static > main >finalize
연산자
- 우선순위
- 최우선 연산자
- 단항 연산자
- 산술 연산자
- 시프트 연산자
- 관계 연산자
- 비트 연산자
- 논리 연산자
- 삼항 연산자
- 배정 대입 연산자
- 후위형 증감연산자(★';'을 만나거나 같은 변수가 같은 라인에 두 번 이상 나올 경우 변경된 값 저장)
- 순차연산자
'PROGRAMMING > Java' 카테고리의 다른 글
[Java]예외처리 (0) | 2023.04.05 |
---|