학습 개요
- java 언어의 발전 과정과 java 언어의 특징 살펴봄
- 바이트 코드, java 플랫폼 등의 새로운 개념 이해
- 간단한 예제 프로그램 학습
- java 프로그래밍을 위한 개발 환경 설치
- 중요한 객체 지향 개념인 추상화와 클래스에 대해 정리
학습 목표
- java 언어의 특징 나열
- 바이트 코드, java 플랫폼에 관해 설명 가능
- java 프로그래밍을 위한 개발 환경 준비
- 객체와 클래스 구별 가능
강의록
Java 언어 개요
Java 언어의 기원
- Sun Microsystems의 제임스 고슬링
- 1990년 그린 프로젝트와 Oak 언어 개발
- 그린프로젝트
- 소형 전자 제품의 셋톱 박스에 들어갈 제어용 프로그램 개발 프로젝트
- Oak 언어
- 후에 Java 언어로 개명
- 1990년 초 World Wide Web의 태동기
- 그린프로젝트
- 1995년 Java와 HotJava 발표
- 웹에서 동작하는 프로그램 개발에 적당 → 웹 확산과 함께 자바 주목
- HotJava
- 자바 언어 수용한 첫번째 웹브라우저
- 1996년 1월 JDK1.0 발표
- 1998년 Java2 SDK, SE 1.2
- 2014년 Java Platform(JDK) SE 8
- 소프트웨어 개발 키트
- 다양한 프로세스에서 수정 없이 사용 가능
- 2023년 9월 Java SE 21 발표
- 2009년 Oracle이 Sun 인수
Java 언어의 특징
- C/C++ 언어와 문법적으로 유사하나 단순함
- 포인터 개념, 전처리기, 메모리 작업 불필요
- 운영체제와 무관, 하드웨어 플랫폼에 독립적
- 자바 플랫폼이 있을 경우 어떤 운영체제에서 사용하든지 간에 수정 없이 실행 가능
- 실행 환경(자바 플랫폼)이 언어에 함께 포함
- 완전한 객체 지향 프로그래밍 언어
- 하이브리드 객체 지향 언어인 C++은 객체 지향적 프로그래밍 및 절차적 언어처럼 작성 가능
- 객체 지향 스타일로만 프로그램 작성 가능
- 데스크톱 응용 외에 웹 또는 네트워크 프로그래밍 용이
- 웹 운영이나 네트워크 활용한 클라이언트 서버 프로그램 작성 시 맞춤 라이브러리 제공
- 변수 등의 사용에 있어서 엄격한 자료형의 검사
- 변수 사용 시 자료형에 대한 검사 엄격
- 예외 처리 기능 제공
- 프로그램 실행 도중 에러 발생 시 비정상적으로 종료가 되기 때문에 예외 처리 기능으로 오류 발생 처리해 프로그램을 끝까지 실행
- 멀티 스레딩 지원
- 스레드
- 하나의 프로그램 안에서 진행 될 수 있는 세부 작업 흐름
- 프로세스 안에서 존재하는 독립적인 작은 실행 흐름
- 운영체제에서 프로세스 생성 → 프로그램 실행
- 독립적인 실행 흐름을 동시에 실행 가능
- 스레드
Java 플랫폼
- 프로그램 실행을 위한 하드웨어, 소프트웨어 환경
- Java 플랫폼은 Java 프로그램의 개발과 실행을 위한 소프트웨어 환경
- 컴파일 후 만들어진 바이트 코드가 자바 플랫폼에서 실행
사용 중인 운영 체제(Windows, Linux)에 맞는 Java 플랫폼을 설치해야함
Java 플랫폼의 구성
Java VM
- Java 프로그램의 실행 환경을 제공하는 가상 기계(소프트웨어 환경)
- Java 프로그램의 구동 엔진
- Java 프로그램 실행에 필요한 사항을 관리
- 메모리 정리를 자동으로 수행
- 가비지 컬랙션
- 메모리 할당 받은 후 메모리를 더 이상 사용하지 않을 때 프로그램 상에서 운영체제로 반환 필요
- Java API(Application Programing Interface)
- 프로그램의 개발에 필요한 클래스 라이브러리
- 패키지(클래스 묶음)들이 계층 구조로 분류되어 있음
- 서브 패키지 존재
실행 과정
- Java 소스 파일 작성
- 컴파일러 이용해 소스파일 컴파일 시 클래스 파일 생성
- jdk에 컴파일러 존재
.java
파일 -컴파일→.class
파일- 자바는 완전한 객체 지향 언어기 때문에 자바 프로그램 작성한다는 것은 클래스를 작성하는 일이 됨
- 클래스가 소스프로그램에 존재 시 각 클래스마다 클래스 파일이 컴파일 과정을 통해 만들어짐
- 클래스 파일이 자바 VM에서 실행되어 프로그램이 실행됨
- 어떤 OS를 사용하던지 간에 호환되는 Java 플랫폼이 존재한다면 자바 프로그램 어디서든지 실행 가능
- Java 소스
.java
- Java 소스 프로그램의 확장자
- 바이트 코드
.class
- 바이트 코드 파일 확장자
- 클래스 파일
- Java 소스를 컴파일한 결과물
- Java 플랫폼의 Java VM에서 실행 가능한 코드
JDK(Java Deveplopment Kit)의 설치
- JDK, Java SDK
- Java 플랫폼과 개발 도구의 묶음
- 컴파일러, 디버거, 문서도구 등
- Java 홈페이지에서 다운로드 후 설치
- 컴파일러, 디버거, 문서도구 등
- 자신이 사용하는 운영 체제에 맞는 것을 선택
- JDK 설치 후 Java 프로그램의 실행
- 소스 작성을 위해 텍스트 편집기 사용
명령 프롬프트 창에서 컴파일 명령은 javac
1
javac Hello.java
명령 프롬프트 창에서 실행 명령은 java
1
java Hello
- Java 플랫폼과 개발 도구의 묶음
- 환경 변수
- PATH 변수 경로 추가
- C:\Program Files\Java\jdk-21\bin
- 컴파일 명령, 자바 실행 명령 등 개발 툴 존재
- C:\Program Files\Java\jdk-21\bin
- JAVA_HOME 변수 경로 추가
- JDK 설치 폴더
- C:\Program Files\Java\jdk-21
- PATH 변수 경로 추가
Eclipse 설치
- Eclipse 홈페이지에 접속
- 무료 오픈 소스 프로그램 개발 도구
- Eclipse IDE for Java Developers
- 설치용 파일(.exe) 또는 압축 파일(.zip) 다운로드
- 설치 과정에서 작업 공간(workspace) 폴더 지정
- workspace
- 프로젝트 폴더, 소스 코드, 클래스 파일 등을 저장하는 장소
- workspace
Eclipse 사용하여 Java 프로그램 개발하기
- Java Project 생성
- File → New → Java Project
- 클래스가 저장될 패키지 생성
- 프로젝트 → 마우스 오른쪽 버튼 → New → Package
- 패키지 안에 클래스 생성
- Java 프로그램은 클래스 단위로 작성
- 패키지 이름 → 마우스 오른쪽 버튼 → New → Class
- 클래스 이름으로 파일 이름(.java) 정해짐
- Java 소스 저장 시 컴파일 되며, 클래스마다 .class 파일 생성됨
main()
메소드를 가진 클래스 실행
Java 소스의 구성
주석, 클래스, main()
메소드
- 주석
/*...*/
- 실행과 무관
- 사이의 내용을 무시함
- 여러 줄 주석
/**...*/
- 소스 코드 맨 앞에 전반적 설명을 작성하는 주석
- 자동으로 소스 코드의 매뉴얼 생성을 가능하게 함
- javadoc 명령
- 여러 줄 주석
//
- 같은 라인에서 이후에 나오는 내용은 실행과 무관함
- 이후 내용을 무시
- 한줄 주석
클래스 정의와
main
메소드의 형식1 2 3 4 5 6 7
package com; public class Main { public static void main(String[] args) { } }
- public class의 이름이 A 일 경우, A.java 파일에 저장되어야 함
Hello 애플리케이션
1 2 3 4 5 6 7 8 9
/** * The Hello class implements an application that * simply prints "Hello, Java Application! " to standard output. */ public class Hello { // 클래스 정의 블록 public static void main(String args[]) { // 프로그램 실행시 main 함수 필요 System.out.println("Hello, Java Application!"); // 출력문 } }
- 대소문자 구분
- 주석,
public class
,main()
메소드, 출력문을 가진 프로그램 System.out
- 표준 출력 담당하는 객체
System
클래스 안에 정의 되어있는 static field인out
사용해 화면 출력print()
또는println()
을 수행
- 실행
- 프로그램 작성
- Hello.java 파일 저장
- 실행
- 실행 버튼 또는 Run 메뉴(Ctrl+ F11) 실행
- 명령어 사용
- 컴파일 명령
javac Hello.java
- 컴파일 명령 실행 시 class 파일 생성
- 클래스 이름.class 생성
- 실행 명령
java Hello
main
함수를 가지고 있는 클래스 이름 입력 시 실행 가능- Hello 클래스에서
main()
메소드 실행
- 컴파일 명령
- 프로그램 작성
프로젝트 배포하기
- 배포
- 개발된 Java 프로그램을 묶어서 외부에서 실행 가능하게 내보내는 것
- 실행에 필요한 클래스 파일을 묶어서 .jar 파일을 만들 수 있음
- 프로젝트 → 마우스 오른쪽 버튼 → Export 선택
- export 유형, jar 파일 경로 및 이름 지정
- 개발된 Java 프로그램을 묶어서 외부에서 실행 가능하게 내보내는 것
객체 지향 프로그래밍
클래스와 객체
추상화
- 구체적인 모든 사실이 아니라 전형적이고 필요한 부분만을 추려서 사물을 이해하고 표현하는 것
- 필요한 일부분만 간단히 표현
- 클래스
- 객체를 만들기 위한 모형 또는 틀
- 공통적인 특징을 가지는 객체들을 추상화하기 위한 수단
- 객체의 상태는 필드(데이터)로, 행위는 메소드로 구현
- 동종의 객체들을 표현한 필드 정의
- 데이터 필드를 가지고 메소드로 표현
- 객체는 특정 클래스의 인스턴스
- 추상화를 통해 프로그램 상에서 표현된 것
- 인스턴스
- 클래스가 실체화 된 것
객체 지향 Java 프로그램
- Java 프로그램과 클래스
- 클래스가 프로그램 구성의 기본 단위
- 객체의 데이터(필드)와 객체의 기능(메소드)이 클래스 구조로 캡슐화되어 있음
- 클래스 정의로부터 객체(인스턴스)들이 만들어지고 객체들 간의 상호작용으로 프로그램이 동작
C 프로그램과 Java 프로그램의 비교
성적 처리를 위한 C 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#include <stdio.h> int e[2]; //영어 성적을 위한 변수 int m[2]; //수학 성적을 위한 변수 void input_grade() { //영어, 수학 성적을 입력 받는 함수 e[0] = 90; //첫 번째 학생의 영어 성적 e[1] = 80; //두 번째 학생의 영어 성적 m[0] = 85; //첫 번째 학생의 수학 성적 m[1] = 80; //두 번째 학생의 수학 성적 } void output_grade() { //총점 출력하는 함수 printf("%d, %d", e[0]+m[0], e[1]+m[1]); } void main(void) { // main 함수 input_grade(); output_grade(); }
- 절차적 프로그래밍
- 프로그래밍의 기본 단위는 함수
성적 처리를 위한 Java 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
// GradeOutput.java class Grade { // 성적 클래스 int e; //영어 성적을 위한 변수 int m; //수학 성적을 위한 변수 void output_grade() { //총점을 구하는 메소드 System.out.println(e+m); } } public class GradeOutput { public static void main(String args[]) { Grade g1, g2; //2명의 성적을 표현하는 변수 선언 g1 = new Grade(); //객체의 생성 g2 = new Grade(); g1.e = 90; g1.m = 85; //점수 입력 g2.e = 80; g2.m = 80; g1.output_grade(); g2.output_grade(); } }
- 객체 지향적 프로그래밍
- 객체.함수이름
연습 문제
똑같은 바이트 코드가 Java 플랫폼이 설치된 다양한 하드웨어와 운영체제에서 수정 없이 실행될 수 있다. Java 언어의 특징 중에 다음 내용이 의미하는 것은?
a. 플랫폼에 독립적
Java 언어의 특징 중에 다음 내용이 의미하는 것은?
1 2
public class A { } class B { }
a. A.class와 B.class가 생성된다.
“Hello, World!”를 화면에 출력하는 자바 프로그램을 작성하라.
a.
1 2 3 4 5
public class Main { public static void main(String[] args){ System.out.println("Hello, World!"); } }
학습 정리
- java 프로그램의 기본 구성 단위는 클래스
- java에서는 변수 자료형에 대한 검사 엄격
- java 프로그램을 위해서 jdk 설치 필요
- java 소스는 컴파일 된 후, 바이트 코드가 java 플랫폼에서 실행됨
- java 플랫폼은 java VM과 java API로 구성됨
main()
메소드 형식은public static void main(String[] args)
- 클래스는 동종 객체를 추상화시켜 표현한 틀이며, 데이터와 메소드로 구성됨
- 객체는 특정 클래스의 인스턴스임