-
Green Project 가정용 전자기기 컴퓨터 언어 디자인
- 작고 견고해야 하며, 신뢰 가능해야함
- CPU 같은 디바이스에 종속 X
-
Virtual Machine에서 동작하는 중간코드 생성 => 이식성 High
-
C++ 기반 생성(절차지향, 객체지향) => Oak(완벽한 객체지향 언어) => Java 네이밍
-
WWW 발전과 Mosaic 사용에 주목
- 자바 기반 웹 브라우저 제작 => HotJava 브라우저로 발전
- Applet이라 불리는 자바의 기능을 보여주기 위해 브라우저가 중간코드(Bytecode)를 해석하도록 만듬
- 자바 기반 웹 브라우저 제작 => HotJava 브라우저로 발전
-
Netscape 2.0 자바 지원
- 단순
- C, C++의 복잡한 기능 제외
- 전위처리, 포인터, 다중 상속, 구조체, goto문, 연산자 중복...
- Garbage Collector 자동 메모리 관리
- C, C++의 복잡한 기능 제외
- 객체지향
- 재사용성 높음
- 코드 & 객체
- 클래스 라이브러리 API 제공
- 분산처리
- 분산 환경에서 TCP/IP 프로토콜을 통해 효율적으로 실행되도록 설계됨
- TCP/IP 네트워크 기능 내장
- HTTP, FTP 라이브러리 제공
- 원격 메서드 호출 관련 RMI(Remote Method Invocation) 기능 라이브러리 제공
- 분산 환경에서 TCP/IP 프로토콜을 통해 효율적으로 실행되도록 설계됨
- 인터프리터
- .java (소스코드) => javac(컴파일) => .class(중간코드, 바이트 코드, 클래스 코드) => java(인터프리팅, 기계어로 해석) => 실행
- java는 컴파일 언어임과 동시에 인터프리터 언어
- 견고
- 포인터 사용 X
- Garbage collector
- 엄격한 데이터 타입 검사
- 실행 시간에 발생하는 에러 처리
- 안전
- 엄격한 데이터 타입 검사
- .java => .class => 클래스 로더(코드 분리), 바이트 코드 검증기(코드 검증) => 실행
- 플랫폼 독립
- 자바 가상 머신에서 구동
- 높은 성능
- Garbage Collector
- 메모리 할당 객체 상태 추적
- 더 이상 참조되지 않으면 자동으로 할당된 메모리 해제
- Garbage Collector
- 멀티 스레드
- 스레드 : 독자적으로 수행하는 하나의 작은 프로그램
- 하나의 CPU가 여러 개의 프로그램 동시에 수행하도록 함
- 동적
- 기존 프로그램 변화없이, 라이브러리에 새로운 메서드나 속성들을 추가 가능
- 프로그램과 라이브러리 연결을 실행히간에 수행 => 라이브러리 변화를 곧바로 적용 가능
- 플랫폼 : 프로그램이 실행될 수 있는 HW & SW 환경을 의미
- 일반적인 플랫폼 : 컴퓨터 + 운영체제
- 자바 플랫폼 : SW만으로 구성, JDK로 설치 (JAVA SE, EE, ME)
- JAVA SE : 자바 언어 대부분의 패키지가 포함
- JAVA EE : 현업에서 사용되는 API가 집약된 에디션
- 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet, DB 연동하는 JDBC, 기타 JNDI, JTA, EJB 포함
- JAVA ME : 모바일 기기 사용되는 API => 스마트폰이 자체 OS => 거의 사장되었음
- 자바 가상 머신
- 자바 APP 실행
- APP이 운영체제에 영향 X
- JVM은 운영체제와 직접 통신해야하므로 운영체제에 맞는 JVM 설치 필요
- 자바 API
- 프로그래머가 필요로하는 기본적인 Class 제공
- 표준 클래스라고 함
- 자바 Package
- java.applet : 애플릿 작성
- java.awt : GUI 패키지, javax 및 swing 패키지와 함꼐 자바 GUI APP 작성시 필수 사용, 버튼, 텍스트필드, 메뉴 등 관련 컴포넌트 및 이벤트 기능 제공
- xjava.io : 자바 입출력 기능, 파일이나 버퍼 등의 입출력 기능 제공
- java.lang : 자바 언어의 기초적인 사항 정의한 클래스, Object 클래스, 문자열, 시스템, 멀티스테드 기능 포함
- java.net : 네트워크 패키지, 소켓 기능 제공
- java.swing : GUI 패키지
- java.util : 날짜, 여러 자료형을 하나로 취급하는 컬렉션 기능 제공
- JDk : Java Development Kit
- JRE : Java Runtime Environment, 실행만을 위한 도구 구성 => SDK(Software Development Kit)까지 설치
- 오라클 홈페이지에서 설치
- 폴더 구조
- bin : jdk와 관련 명령들을 포함, 자바 컴파일러와 인터프리터 명령도 포함
- Javac : 자바 컴파일러
javac [options] 소스파일명.java
- 자바 소스를 자바 바이트 코드로 번역
- java : 자바 App 인터프리터
java [options] 클래스파일명 [매개변수 리스트]
- .class 해석하여 실행 결과를 보여줌
- appletviewer : 자바 애플릿 뷰어
appletviewer [options] url포함하는 html 파일명.html
- 자바 애플릿을 실행하는 작은 웹 브라우저
- jdb : 자바 디버거
jdb 클래스파일명
- 프로그램 버그 해결위한 디버거
- javadoc : 자바 문서 생성기
javadoc [options] 소스파일명.java
- 자바 소스 파일에 대한 html 파일 생성, 소스 프로그램의 클래스나 인터페이스, 생성자, 메서드, 클래스 계층 구조에 대한 html 파일 생성
- javap : 자바 역컴파일러
javap [options] 클래스파일명
- 컴파일 후 생성된 자바 클래스 파일을 역컴파일하여 클래스 내의 정보를 추적
- jar : 자바 파일 압축기
jar [options] jar 파일명 리스트
- 다수의 자바 클래스 파일들을 하나의 .jar 파일로 압축하여 네트워크를 통한 프로그램 정손 시간 단축
- Javac : 자바 컴파일러
- include : 플랫폼 별 필요한 JDK 각종 헤더파일 포함
- jre : 자바 실행 환경 관련 명령어 라이브러리 포함
- lib : jdk에서 사용될 라이브러리 포함
- bin : jdk와 관련 명령들을 포함, 자바 컴파일러와 인터프리터 명령도 포함
public class 클래스명 {
//변수 정의
// 메서드 정의
}
- 자바 프로그램은 하나의
.java
파일에 하나의 클래스 정의 - 클래스 : 자바 프로그램의 최소 구성 단위, 클래스 블록
{ }
안에 실행에 필요한 변수와 메서드 정의 public
: 자바 예약어, 해당 .java 파일의 클래스를 외부에 공개- 주석
- .class 파일의 크기에 영향 X
- 단일행 :
//
- 다중행 :
/* */
- Javadoc 형태 :
/** */
javadoc 파일명.java
을 통해 주석문 내용 & 클래스 내의 코드들(변수, 메서드, 생성자 정보)가 html 문서로 제공
- 자바 앱 : 바이트 코드로 번역 후 바로 실행가능한 일반 프로그램
main()
: java 명령어로 프로그램 실행시 자동 호출되어 시작되는 메서드
- 블록
{}
: 클래스, 메서드, 자바 구문에 사용 - 세미콜론
;
: 문장을 구분하기 위해 사용 - java.io : 입출력 작업 패키지
System.out.println()
- System : 클래스
- out : 변수
- println : 메서드
식별자
-
클래스, 변수, 메서드에 주어지는 이름
-
첫 문자는 영문자, _, $, 유니코드
-
특수문자 사용 불가
-
대소문자 구별, 길이 제한 X
-
예약어 포함가능하나 예약어 자체만은 불가
-
숫자 가능하나 첫 문자에는 사용 불가
-
클래스와 상수는 대문자로 시작
-
메서드와 변수는 소문자로 시작
예약어
-
시스템에서 일정 특성을 가진 언어를 등록, 데이터 타입이나 프로그램 정의에 활용
-
소문자로 구성
데이터 타입
- 데이터의 성격을 규정
데이터타입 변수명;
- 논리값
- boolean : 1bit, true false 두 리터럴 값 존재
- 자바에서는 int와 boolean 간에 형변환 불가능
- 단일 문자
- char : 16bit 유니코드 문자데이터, 홑따옴표 사용, 정수형으로 형변환 가능, unsigned 값,
\u0000
부터\uffff
표현범위 갖음 - 특수 문자
- \n :
\u000A
- \t :
\u0009
- \b :
\u0008
- \r :
\u000D
- \f :
\u000C
, form feed - \\ :
\u005C
, 백슬레쉬 - \' :
\u0027
, 홑따옴표 - \'' :
\u0022
, 쌍따옴표
- \n :
- char : 16bit 유니코드 문자데이터, 홑따옴표 사용, 정수형으로 형변환 가능, unsigned 값,
- 정수
- signed 형태, 첫 비트가 0이면 양수, 1이면 음수
- 진수 표기 : 8진수
0
, 16진수0x
- byte : 부호가 있는 8bit 정수, -128 ~ 127
- short : 부호가 있는 16bit 정수, -32768 ~ 32767
- int : 부호가 있는 32bit 정수, -2147483648 ~ 2147483647
- long : 부호가 있는 64bit 정수, 문자
L
사용, -9223372036854775808 ~ 9223372036854775807
- 실수
- float : 부호가 있는 32bit 부동소수점 실수
- double : 부호가 있는 64bit 부동소수점 실수
- E, e : 지수
- F, f : float
- D, d : double
- 3.14, 6.02E23, 1.718F
변수
-
프래그래머가 메모리상의 데이터에 접근하기 위한 방법
-
컴퓨터 내부 데이터와 1:1 대응
-
기본형(Primitive type)과 참조형(Reference type) 두 가지 변수가 존재
변수 선언
- JVM에게 데이터를 저장하기 위한 메모리 할당 요청
데이터타입 변수명
: 하나 이상의 공백 필요int var;
: 변수 선언var = 25;
: 변수 초기화 (변수에 처음 값이 할당되는 과정)int var = 25;
- 자동초기화와 각 데이터 유형별 할당 기본값
- 단, 메서드 안에서 선언된 지역변수는 자동초기화X
- 0 : byte, short, int
- 0L : long
- float : 0.0F
- double : 0.0D
- char :
\u0000
(Null) - boolean : false
- 참조형 : null
- String : Class 형
- 전역 변수와 지역 변수 : 블록안에서 사용 가능
형변환 연산자
()
사용
- 큰 데이터 타입으로 변환 : Promotion (묵시적 형변환), 데이터 손실 우려 X, 자동 캐스팅
- 작은 데이터 타입으로 변환 : Demotion (명시적 형변환), 데이터 손실 우려 O, 명시적 캐스팅
//묵시적 형변환
int age = 25;
double avgAge = age; //double avgAge = (double)age; 와 동일
//명시적 형변환
int sum = 128;
byte data = (byte)sum; // 불가시 전혀 다른값이 할당 (해당 예시에서는 -128값 할당)
- 단항 연산자
- ++
- ++값
- 값++
- --값
- 값--
- ++
- 이항 연산자
-
-
-
- /
- &
-
- 대소 비교, 객체 타입 비교에 사용
- 비교 연산 수행결과가 boolean 데이터 타입의 결과로 리턴
>
,>=
<
,<=
==
,!=
instanceof
- boolean 데이터 타입에 적용, boolean갑으로 리턴
- &, and
- |, or
- &&, || : 단축 연산자
- ! : boolean값 바꿈
- 값을 bit로 연산하는 연산자
- 메모리 최대한 효율적 활용가능
- &
- |
- ^
- ~
>>
: 부호비트에 현재 부호비트값 채워짐>>>
: 부호비트에 0 채워짐<<
: 최우측비트에 0 채워짐
-
대입 연산자 : 변수에 값을 저장
- =
- +=
- -=
- *=
- /=
- %=
- &=
- |=
- ^=
<<=
<<<=
>>=
-
다항 연산자 : if else 문장을 축약가능
변수 = 조건 ? 값1 : 값2
-
최우선순위
()
[]
.
- 배열 : 같은 타입의 데이터 모임
- 메모리 절약, 쉽고 간결하게 프로그램 작성 가능
- 객체로 표현, 참조형 사용
String greeting; // String 자료형 greeting 변수 선언
greeting = new String("Hello, Java!"); // greeting 변수에 값 할당
//Hello, Java! 가 String Object로 저장
//greeting에는 위 String Obeject의 주소 저장
- 변수 선언 :
데이터타입 배열변수명 []
or데이터타입 [] 배열변수명
- 배열 객체 생성 :
배열변수명 = new 데이터타입[배열의 길이]
int scoreList[] = new int[100];
int [] scoreList = { 1, 2, 3, 4, 5};
scoreList = new int[] {1, 2, 3, 4, 5}
.length
: 배열의 길이 리턴[idx]
: 배열의 저장된 값 참조
- 다차원 배열 = 배열의 배열
dataType [][] arrayName
dataType [] arrayName []
- 서로 다른 길이로 생성된 일차원 배열 참조도 가능
dataType[][] arrayName = new dataType[3][]
arrayName [0] = new int[2];
arrayName [1] = new int[3];
arrayName [2] = new int[4];
명령행 매개변수
-
문자열의 배열을 배개변수로 받아, 프로그램 실행 시 필요한 정보를 프로그램에 전달
-
main()의 매개변수
:String args[]
-
매개변수 전달 :
java className arg1 arg2 ...
- 문자열 => 숫자 : 형변환 필요
- 자바 APi 메서드
- Integer.parseInt()
- Double.parseDouble()
- 자바 APi 메서드
- 문자열 => 숫자 : 형변환 필요
-
run configurations에서 args 설정
- 조건에 따라 분기
- else절은 가장 가까운 if 문과 짝을 이룸
- 수행 Statement가 한 줄일 경우, 블록 생략 가능
if(Expression1) {
Statement1;
} else if(Expression2) {
Statement2;
} else {
Statement3;
}
Statement4;
- Expression 값에 따른 case 활용 다중 분기 처리
Expression 값은 char, byte, short, int 형만 가능
switch (Expression) {
case value1 :
Statement1;
break; // 의도적으로 생략 가능
case value2 :
Statement2;
break;
default :
Statement3;
break;
}
Statement4;
for(초기식; 조건식; 증감식)
{ Statement; }- for 블록 내 선언된 변수는 for 블록내에서만 사용가능
- for 블록 포함 메서드 내의 선언된 변수와 같은 이름으로 선언 불가능
while(조건식) { Statement; }
do { Statement; } while(조건식);
수행 흐름을 원하는 곳으로 이동시킬 때 사용
- switch 문 : switch 블록 종료
- 반복문 : 반복문 종료
- 반복문 : 현재 단계의 수행 생략하고 다음 단계 실행을 위해 조건부 실행 위치로 옮긴다
- 메서드의 수행을 종료하고 메서드가 호출된 곳으로 제어를 이동시킴
중첩된 반복문을 빠져나갈때 사용
-
특정 반복문에 Lable 설정 :
Label : 반복문;
-
특정 Label로 break 설정 :
break [Label]
-
특정 Label로 continue 설정 :
continue [Label]
-
사용을 권하진 않음
outer : for(i=0; i<5; i++) {
for(j=0; j<5; j++) {
if(i+j == 6) {
break outer;
}
System.out.println(i+j);
}
}