(http://compiler.sangji.ac.kr, kkman@sangji.ac.kr) Lecture 01: Java 소개 Kwangman KO (http://compiler.sangji.ac.kr, kkman@sangji.ac.kr) SangJi University 2012
이 장의 내용 Java의 발전 과정과 응용 분야 컴퓨터 하드웨어 구조 프로그램이 실행되는 원리 프로그램과 프로세스의 차이
Java는 이름? Java는 커피 생산지 아닌가? Oak 프로젝트란? Oak 프로젝트를 개명하여 Java로 바꿈 제임스 고슬링이 주도한 프로젝트 임베디드 시스템용 프로그램을 개발하기 위한 프로젝트 Java의 높은 안전성은 '임베디드 시스템'으로부터 유래됨
Java, 객체지향 프로그래밍 Java는 객체지향 프로그래밍 언어 고슬링은 왜 Java를 선택했는가? 객체지향 프로그래밍: 객체를 중심으로 프로그램을 작성하는 방식 객체: 상태를 유지하며 외부 요청에 반응하는 어떤 대상을 나타냄 고슬링은 왜 Java를 선택했는가? 임베디드 시스템은 계산 자원이 충분하지 않음 그에 비해 C++나 Smalltalk은 너무 덩치가 컸음 그래서 고슬링은 새로운 언어를 만들기로 결정함
Java의 특징 객체지향성 하드웨어 독립성 강력한 라이브러리 다양한 플랫폼 자동 메모리 관리 프로그램 설계와 유지보수가 쉬움 한 번 작성하여 아무곳에서나 실행(Write Once Run Anywhere; WORA) 강력한 라이브러리 다양한 응용분야를 지원할 수 있음 다양한 플랫폼 데스크톱은 물론, 휴대폰, 서버까지 지원함 자동 메모리 관리 불안정한 상태가 되는 현상을 줄일 수 있음
설계 목표 C/C++의 복잡한 기능 일부 삭제 친숙한 언어 작고 간단해서 쉽게 프로그래밍하고, 쉽게 디버깅하고, 쉽게 배울 수 있도록 하는 것 C/C++의 복잡한 기능 일부 삭제 포인터 연산 삭제 자동적인 메모리 관리 친숙한 언어 기본기능 : 연산자와 문장 구조 - ANSI C(표준 C) 언어 고급기능 : 객체 지향적인 개념 - C++ 언어
운영체제 독립적 운영체제는 하드웨어 자원을 관리하는 시스템 소프트웨어 일반적으로 운영체제가 다르면, 프로그램이 동작하지 않는다.
아키텍처에 독립적 기존 개발환경과의 비교 플랫폼 독립적인 중간코드 사용 – 바이트코드(bytecode) 가상기계를 이용하여 실행 – JVM(Java Virtual Machine) 기존 개발환경과의 비교 전통적인 컴파일링 시스템 플랫폼에 독립적인 시스템
네이티브 에플리케이션
Java 어플리케이션
컴파일 및 실행 HelloWorld.java 자바 컴파일러 (javac) HelloWorld.class public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } C:\JDK\BIN>javac HelloWorld.java C:\JDK\BIN>java HelloWorld Hello World!
하드웨어와 소프트웨어 컴퓨터 하드웨어 컴퓨터 소프트웨어 컴퓨터를 구성하는 물리적 장치 본체, 모니터, 키보드, 마우스 등 본체 내에는 CPU, 메모리(RAM) 등이 존재함 컴퓨터 소프트웨어 컴퓨터가 수행할 프로그램과 필요한 데이터 매우 중요하긴 하지만 하드웨어 없이는 볼 수 없는 형태임 시스템 소프트웨어와 응용 소프트웨어로 구성됨
컴퓨터 하드웨어 구조 CPU와 주변장치가 BUS로 연결되어 있음 BUS는 데이터 전송로임 CPU BUS 입출력장치 RAM HDD 저장장치 CPU RAM 메모리 입출력장치 BUS
프로그램과 프로세스 프로그램 프로세스 컴퓨터가 수행할 명령어들을 나열한 것 하드디스크에 파일 형태로 저장되어 있음 실행 시에는 메모리로 읽어 들임(적재; loading) 프로세스 메모리에 적재되어 수행되고 있는 프로그램 명령어 뿐만 아니라 수행 상태 정보도 포함하고 있음 현대적 운영체제는 여러 프로세스를 동시에 수행함
컴파일러와 인터프리터 컴파일러 인터프리터 CPU가 알아듣는 명령어를 기계어(machine language)라고 함 프로그래밍 언어로 작성된 프로그램을 기계어로 번역해 주는 프로그램 인터프리터 프로그램의 한 문장을 필요할 때마다 해석하여 수행하는 프로그램 CPU의 인출-실행 주기와 같은 방식으로 동작함
컴파일(Compile) 기법 프로그램이 컴파일러에 의해 0과 1로 구성된 이진 파일로 번역된 다음, 번역된 파일이 컴퓨터에서 실행되는 기법
인터프리트(Interprete) 기법 프로그램을 한 줄씩 번역한 다음 바로 실행시켜 결과를 나타내는 방식(실행파일을 만들지 않는다)
하이브리드(Hybrid) 기법 컴파일 기법과 인터프리트 기법을 모두 사용하는 방식(중간코드 사용)
실행 환경에 따른 프로그램 분류 데스크톱 프로그램 웹 프로그램 독립적인 한 컴퓨터에서 수행되는 프로그램 흔히 응용 프로그램이라고 부름 웹 프로그램 웹 브라우저를 통하여 수행되는 프로그램 전통적인 클라이언트 서버 프로그램의 일종임
Web program vs. Java 웹 프로그램의 특징 Java와 웹의 관계 웹 브라우저 상에서 수행되므로 설치할 필요가 없음 한 번만 작성하면 아무 곳에서나 수행될 수 있음 WORA(write once, run anywhere) Java와 웹의 관계 Java 프로그램은 웹 브라우저에서 실행되도록 작성할 수 있음 웹 브라우저에 Java 실행 엔진을 탑재시키고 Java 코드를 네트워크로 전송함
Java Virtual Machine; JVM 실제 기계가 아니라 프로그램으로 구현한 기계 Java 바이트 코드를 이해하고 수행해 주는 인터프리터 프로그램 Java 컴파일러 사람 JVM Java 소스코드 Java 바이트코드 작성 실행
Java 플랫폼 Java 플랫폼이란? Java 가상 기계와 클래스 라이브러리 Java SE, Java EE, Java ME 등이 있음
Java 플랫폼 : JVM + API 장점 : 하드웨어 플랫폼 독립성 단점 : 실행 속도의 저하 자바 프로그램 API 자바 자바 가상 기계 API 자바 프로그램 하드웨어 기반 플랫폼 자바 플랫폼
Java SE(Standard Edition) 데스크탑용 프로그램에 사용 개발 : JDK, 이클립스, 넷빈즈 등 실행 : JRE(Java Runtime Environment) 설치 필요 주요 응용 분야 콘솔 프로그램 문자기반의 콘솔을 통해 입출력 수행 그래픽 프로그램 그래픽 사용자 인터페이스(GUI : Graphic User Interface)를 통해 입출력 수행 애플릿 웹브라우저에서 실행되는 간단한 자바 프로그램
Java EE(Enterprise Edition) 기업용 프로그램 작성을 위한 분산 객체, 트랜잭션, 높은 이식성 제공 개발 : 별도의 Java EE SDK 사용 실행: 여러 종류의 애플리케이션의 조합으로 동작 Java ME(Micro Edition) 내장형기기(embedded device)를 위한 자바 플랫폼 휴대폰, PDA, 셋탑박스 등 성능이 낮고, 메모리가 작은 기기 다양한 CPU와 운영체제가 사용되어 플랫폼 독립성이 중요
Java 기본 패키지 java.lang java.io java.util 자바의 기능을 확장해 주는 기본적인 클래스 : Object, String 등 자바 컴파일러에 의해 자동으로 import java.io 스트림 입출력, 파일 입출력에 관련된 클래스 제공 java.net 패키지는 소켓, 텔넷 인터페이스, URL 클래스 제공 java.util 프로그래머에게 유용한 벡터, 스택 , 해쉬테이블 등… java.awt (Abstract Window Toolkit) 플랫폼 독립적인 GUI 개발 도구 java.swing은 자바로 구현되어 어느 시스템에서도 동일하게 보임
Java 개발환경 Java 개발환경이란? 두 가지 형태의 개발 환경 컴파일러, 문서 생성기, 디버거 등 개발에 필요한 제반 프로그램 주로 사용할 도구는 java(Java 가상기계)와 javac(Java 컴파일러)임 두 가지 형태의 개발 환경 IDE 환경: 여러 도구가 하나의 윈도우 인터페이스 형태로 제공됨 Integrated Development Environment; IDE 프로그래밍 환경과 운영 환경이 결합 프로그램의 작성부터 실행까지 대화식으로 수행가능한 개발환경 이클립스, 넷빈즈 명령줄 환경: 필요한 도구를 일일이 명령어로 호출하여 사용함
Java 프로그램 사용 형태 자바 응용 프로그램 : 일반적인 응용 프로그램 자바 애플릿 : 웹 검색기 상에서 작동하는 프로그램 자바 서블릿 : 웹 환경에서 실행되는 자바 프로그램 JSP(Java Server Page) : 서블릿과 비슷하나 HTML 속에 자바 코드를 삽입하여 사용 자바 빈스(Beans) : 자바로 작성된 프로그램(컴포넌트)을 부품처럼 사용하여 프로그래밍 하는 방법
JDK 설치 JDK란? JDK 다운로드 및 설치 환경변수 설정 Java Development Kit의 약자 다운로드 사이트: http://www.oracle.com/technetwork/java/ Java SE를 다운로드하여 설치함 환경변수 설정 JAVA_HOME: C:\Program Files\Java\jdk1.6.0_10 PATH: C:\Program Files\Java\jdk1.6.0_10\bin;...
환경변수 설정 윈도우즈의 경로에 자바 도구가 설치된 경로를 추가 [내 컴퓨터] – [속성] – [고급] - [환경 변수]
환경변수 설정 변수 이름 : “Path” 변수 값 : JDK를 설치한 경로와 \bin
javac java jar 자바 소스 파일을 자바 클래스 파일로 컴파일해 주는 도구 형식 : javac [Options] SourceFileName.java 예 : javac HelloWorld.java java 클래스 파일을 읽어 실행하는 자바 가상기계, 인터프리터 형식 : java [options] ClassName [command-line arguments] 예 : java HelloWorld jar 자바 프로그램을 압축하는 유틸리티, JAR 파일을 관리하는 도구
javadoc 자바 소스 파일에 있는 문서 주석(Document comment)으로부터 HTML 문서로 구성된 자바 API 문서를 생성하는 도구 jdb 자바 애플리케이션을 디버그하기 위해서 사용하는 도구 javah 자바 네이티브 인터페이스(JNI; Java Native Interface)에 필요한 C/C++ 헤더 파일(Header File)을 생성해 주는 도구
Eclipse 설치 Eclipse 다운로드 및 설치 Eclipse의 특징 다운로드 사이트: http://www.eclipse.org/ 설치할 때 워크스페이스를 설정함 워크스페이스는 Eclipse와 관련된 프로젝트가 저장되는 공간임 Eclipse의 특징 여러 프로그래밍 언어를 지원함 각 언어별 설정을 퍼스펙티브(perspective)라고 함 Java 퍼스펙티브가 기본으로 설정되어 있음
Eclipse 설치 Eclipse는 자바 프로그램을 개발하기 위한 통합 개발 환경(Integrated Development Environment) Step 1 : 이클립스 홈페이지(www.eclipse.org) 방문
Eclipse 설치 Step 1 : 세번째에 있는 “Eclipse Classic 3.6.1” 오른쪽은 “Windows 32 Bit”를 선택
Eclipse 설치 Step 1 : 화면에서 “[Korea, Republic Of] Daum Communications (http)”을 선택하여 파일을 다운
Eclipse 설치 Step 1 : 다운받은 소프트웨어를 더블 클릭하여 적당한 위치에 압축을 풀면 설치가 끝난다
Eclipse 설치 Step 2 : 다운받은 소프트웨어를 실행(eclipse 실행파일을 실행)
Eclipse 기본 구조와 사용 방법 이클립스의 기본 구조
Eclipse 기본 구조 뷰 : 이클립스에서 가장 기본이 되는 요소이다. 메뉴의 [Window] → [Show View] 메뉴에서 모든 뷰를 선택 사용자는 뷰를 마우스로 드래그하여 적당한 위치에 배치하거나, 메뉴를 사용하여 화면에 나타낼 수 있다.
Eclipse 기본 구조와 사용 방법 eclipse의 주요 뷰
Eclipse를 이용한 프로그램 작성 순서 Step 1 : Eclipse를 실행 작업할 디렉터리를 지정
Eclipse를 이용한 프로그램 작성 순서 Step 2 : 프로젝트 선정 프로젝트를 지정
Eclipse를 이용한 프로그램 작성 순서 Step 2 : 왼쪽의 Package Explorer 뷰에 패키지가 나타난다
Eclipse를 이용한 프로그램 작성 순서 Step 3 : 클래스 작성(메뉴에서 [File] → [New] → [Class]를 선택)
Eclipse를 이용한 프로그램 작성 순서 Step 4 : 편집기 창에서 프로그램 입력
Eclipse를 이용한 프로그램 작성 순서 Step 5 : 프로그램 실행 매개변수가 없는 경우 : [Run] → [Run]을 이용 매개변수가 있는 경우에는 [Run] → [Run Configurations..]을 이용
Eclipse를 이용한 프로그램 작성 순서 Step 6 : 프로그램의 실행결과가 Console 뷰에 나타남
NetBeans IDE 설치 NetBeans IDE 다운로드 및 설치 NetBeans IDE의 특징 다운로드 사이트: http://netbeans.org/ Java SE 지원 버전을 선택하여 설치함 NetBeans IDE의 특징 Eclipse와 마찬가지로 여러 언어를 지원함 PHP, Ruby, JavaScript 등 웹 개발 언어도 지원함 버전 관리 도구와 연동되며 협업 환경을 지원함
DrJava 설치 DrJava 다운로드 및 설치 DrJava의 특징 다운로드 사이트: http://www.drjava.org/ 다운로드한 파일을 그냥 실행하면 됨 DrJava의 특징 프로젝트를 생성하지 않아도 프로그램을 컴파일하고 실행시켜 볼 수 있음 Interactions 탭을 이용하여 Java 문장을 수행시켜 볼 수 있음
Java 프로그램 작성, 번역, 실행
Eclipse로 프로그램 작성하기 Eclipse로 프로그램을 작성하는 순서 예제 프로그램 프로젝트 만들기: File New Java Project 프로젝트에 클래스 추가: File New Class 프로그램 입력: 아래 예 참고 프로그램 실행: Run Run 예제 프로그램 public class Hello { public static void main(String args[]) { System.out.println("Hello"); }
Hello.java 자세히 보기
몇 가지 규칙 이름 규칙 main 규칙 리턴타입과 리턴 값 파일 이름과 클래스 이름이 같아야 함 Hello 클래스는 Hello.java 파일에 존재해야 함 main 규칙 main 메소드는 public 클래스에 선언되어야 함 main의 인수는 항상 String[] args, 리턴타입은 항상 void임 리턴타입과 리턴 값 메소드의 리턴 값은 리턴타입과 일치해야 함 리턴타입이 void라면 리턴 값이 없다는 뜻임
프로그래밍 오류 프로그래밍 오류란? 프로그래밍 오류의 종류 프로그램이 원하는 상태로 실행되지 않는 원인 구문오류: 프로그램을 더 이상 컴파일할 수 없는 오류 실행시간 오류: 프로그램 실행을 더 이상 진행할 수 없는 오류 논리 오류: 프로그램이 실행되어 결과가 나오지만 예상하는 결과와 다른 값이 나오는 경우
javadoc 사용하기 javadoc이란? 주의 Java 프로그램의 주석을 이용하여 문서를 생성해 주는 도구 주석 중에서 /** … */ 형태의 주석을 처리함 사용법: Project Generate Javadoc… 주의 폴더에 공백이 있으면 문서 생성 위치가 예상과 다를 수 있음