학습 목차
- Java 언어와 Java 프로그램
- Java 플랫폼
- 첫번째 Java 프로그램
- 객체 지향 프로그래밍
학습 개요
- java 언어의 발전 과정과 java 언어의 특징 살펴봄
- 바이트 코드, java 플랫폼 등의 새로운 개념 이해
- 간단한 예제 프로그램 학습
- java 프로그래밍을 위한 개발 환경 설치
- 중요한 객체 지향 개념인 추상화와 클래스에 대해 정리
학습 목표
- java 언어의 특징 나열
- 바이트 코드, java 플랫폼에 관해 설명 가능
- java 프로그래밍을 위한 개발 환경 준비
- 객체와 클래스 구별 가능
1. Java 언어와 Java 프로그램
1-1. 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
- 소프트웨어 개발 키트
- 다양한 프로세스에서 수정없이 사용 가능
- 2020년 9월 Java SE 15
- 2009년 Oracle이 Sun 인수
1-2. Java 언어의 특징
- C/C++ 언어와 문법적으로 유사하나 단순함
- 포인터 개념, 전처리기, 메모리 작업 불필요
- 플랫폼에 독립적
- 자바 플랫폼이 있을 경우 어떤 운영체제에서 사용하든지 간에 수정 없이 실행 가능
- 실행환경(자바 플랫폼)이 언어에 함께 포함
- 완전한 객체 지향 언어
- 하이브리드 객체 지향 언어인 C++은 객체 지향적 프로그래밍 및 절차적 언어처럼 작성 가능
- 객체 지향 스타일로만 프로그램 작성 가능
- 웹 또는 네트워크 프로그래밍 용이
- 웹 운영이나 네트워크 활용한 클라이언트 서버 프로그램 작성 시 맞춤 라이브러리 제공
- 엄격한 자료형의 검사
- 변수 사용 시 자료형에 대한 검사 엄격
- 예외 처리 기능 제공
- 프로그램 실행 도중 에러 발생 시 비정상적으로 종료가 되기 때문에 예외처리 기능으로 오류 발생 처리해 프로그램을 끝까지 실행
- 멀티 스레딩 지원
- 스레드
- 하나의 프로그램 안에서 진행 될 수 있는 세부 작업 흐름
- 프로세스 안에서 존재하는 독립적인 작은 실행 흐름
- 운영체제에서 프로세스 생성 → 프로그램 실행
- 독립적인 실행 흐름을 동시에 실행 가능
- 스레드
1-3. Java 프로그램의 실행
- 실행 과정
- Java 소스 파일 작성
- 컴파일러 이용해 소스파일 컴파일 시 클래스 파일 생성
- jdk에 컴파일러 존재
.java
파일 -컴파일→.class
파일- 자바는 완전한 객체 지향 언어기 때문에 자바 프로그램 작성한다는 것 = 클래스를 작성하는 일
- 클래스가 소스프로그램에 존재 시 각 클래스마다 클래스 파일이 컴파일 과정을 통해 만들어짐
- 클래스 파일이 자바 VM에서 실행되어 프로그램이 실행됨
- 어떤 OS를 사용하던지 간에 호환되는 Java 플랫폼이 존재한다면 자바 프로그램 어디서든지 실행 가능
.java
- Java 소스 프로그램의 확장자
- 바이트 코드
- Java 소스를 컴파일한 결과물
.class
확장자- 클래스 파일
- 자바 플랫폼의 Java VM에서 실행 가능한 코드
1-4. 애플리케이션과 애플릿
- 애플리케이션 (Application)
- Java 플랫폼에서 실행되는 프로그램
- 실행 위해
main()
함수 필요
- 애플릿 (Applet)
1 2
<!-- 애플릿 태그 --> <APPLET CODE="HelloApplet.class" WIDTH=200 HEIGHT=100></APPLET>
- 브라우저 안에서 실행 가능한 자바 프로그램
- HTML 웹 페이지에 포함되어 웹 브라우저를 통해 실행
- 컴파일된 자바 애플릿 클래스 파일 ex) HelloApplet.class
- 웹 상에서 클라이언트 프로그램인 브라우저를 이용해 웹 서버에게 HTML 문서 요청 → 웹서버가 요청에 대한 답을 클라이언트에게 전송
2. Java 플랫폼
2-1. 플랫폼(platform)
- 프로그램 실행을 위한 하드웨어, 소프트웨어 환경
- Java 플랫폼은 Java 프로그램의 개발과 실행을 위한 소프트웨어 환경
- 컴파일 후 만들어진 바이트 코드가 자바 플랫폼에서 실행
- 운영 체제(Windows, Linux)에 맞는 Java 플랫폼 설치 필요
2-2. Java 플랫폼
- Java VM
- Java 프로그램의 실행 환경을 제공하는 가상 기계(소프트웨어 환경)
- Java 프로그램의 구동 엔진
- Java 프로그램 실행에 필요한 사항을 관리
- 메모리 정리를 자동으로 수행
- 가비지 컬랙션
- 메모리 할당 받은 후 메모리를 더 이상 사용하지 않을 때 프로그램 상에서 운영체제로 반환 필요
- Java 프로그램의 실행 환경을 제공하는 가상 기계(소프트웨어 환경)
- Java API(Application Programing Interface)
- 프로그램의 개발에 필요한 클래스 라이브러리
- 패키지(클래스 묶음)들이 계층 구조로 분류되어 있음
- 서브 패키지 존재
2-3. JDK의 설치
- Java 홈페이지에서 다운로드 후 설치
- Java SE Development Kit(JDK) 15 설치
- 환경 변수 PATH 수정
- C:\Program Files\Java\jdk-15.0.1\bin 추가
- 컴파일 명령, 자바 실행 명령 등 개발 툴 존재
- C:\Program Files\Java\jdk-15.0.1\bin 추가
- 환경 변수 JAVA_HOME 생성
- C:\Program Files\Java\jdk-15.0.1 대입
2-4. Eclipse 설치
- Eclipse 홈페이지에 접속
- Eclipse IDE for Java Developers
- 압축 파일 다운
- eclipse-java-2020-12-R-win32-x86_64.zip
- 적당한 곳에서 압축파일 풀면 설치됨
- D:\eclipse
3. 첫 번째 Java 프로그램
3-1. 간단한 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()
메소드, 출력문
3-2. Java 프로그램
- 주석
/*
…*/
- 사이의 내용 무시
- 여러 줄 주석
/**
…*/
- javadoc 이용한 API 문서 만들기
- 클래스 설명
- 여러 줄 주석
//
- 이후 내용 무시
- 한줄 주석
- 클래스의 정의
public class Hello { ... }
public class
파일에 최대 1개- 파일 이름
- 퍼블릭 클래스의 이름.java
main() { ... }
main()
메소드 형식public static void main(String[] args)
- 출력
System.out
- 표준 출력 담당하는 객체
System
클래스 안에 정의 되어있는 static field인out
사용해 화면 출력print()
또는println()
을 수행
- 실행
- 프로그램 작성
- Hello.java 파일 저장
- 컴파일 명령
javac Hello.java
- 컴파일 명령 실행 시 class 파일 생성
- 클래스 이름.class 생성
- 실행 명령
java Hello
main
함수를 가지고 있는 클래스 이름 입력 시 실행 가능- Hello 클래스에서
main()
메소드 실행
- 프로그램 작성
4. 객체 지향 프로그래밍
4-1. 클래스와 객체
- 추상화
- 구체적인 모든 사실이 아니라 전형적이고 필요한 부분만을 발췌하여 사물을 이해하고 표현하는 것
- 필요한 일부분만 간단히 표현
- 클래스
- 추상화를 통해 프로그램 상에서 표현 된 것
- 객체를 만들기 위한 모형 또는 틀
- 공통적인 특징을 가지는 객체들을 추상화하기 위한 수단
- 객체의 상태는 필드(데이터)로, 행위는 메소드로 구현
- 동종의 객체들을 표현한 필드 정의
- 데이터 필드를 가지고 메소드로 표현
- 객체는 특정 클래스의 인스턴스
- 인스턴스
- 클래스가 실체화 된 것
- 인스턴스
4-2. 객체지향 프로그램
- Java 프로그램
- 클래스가 프로그램 구성의 기본 단위
- 데이터(필드)와 알고리즘(메소드)이 클래스에 캡슐화되어 있음
- 클래스 정의로부터 객체들이 만들어지고 객체들 간의 상호작용으로 프로그램이 동작
4-3. C 프로그램과 Java 프로그램
- 성적 처리를 위한 C 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
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
// 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에서는 변수 자료형에 대한 검사 엄격
- java 프로그램을 위해서 jdk 설치 필요
- java 소스는 컴파일 된 후, 바이트 코드가 java 플랫폼에서 실행
- java 플랫폼은 java VM과 java API로 구성
main()
메소드 형식은public static void main(String[] args)
연습문제
Q1.
1
2
3
4
// 똑같은 바이트코드가 Java 플랫폼이 설치된 다양한 하드웨어와 운영체제에서 수정없이 실행될 수 있다.
// Java 언어의 특징 중에 다음 내용이 의미하는 것은?
// 플랫폼에 독립적
Q2.
1
2
3
4
5
public class A { }
class B { }
// Java 언어의 특징 중에 다음 내용이 의미하는 것은?
// A.class와 B.class가 생성된다.
Q3.
1
2
3
4
5
6
7
// “Hello, World!”를 화면에 출력하는 자바 프로그램을 작성하라.
public class Hello {
public static void main(String[] args){
System.out.println("Hello, World!");
}
}