Home [Java 프로그래밍] 1강 - JAVA와 객체지향 프로그래밍
Post
Cancel

[Java 프로그래밍] 1강 - JAVA와 객체지향 프로그래밍

💡해당 게시글은 방송통신대학교 김희천 교수님의 'Java 프로그래밍' 강의를 개인 공부 목적으로 메모하였습니다.



학습 목차


  1. Java 언어와 Java 프로그램
  2. Java 플랫폼
  3. 첫번째 Java 프로그램
  4. 객체 지향 프로그래밍

학습 개요


  • java 언어의 발전 과정과 java 언어의 특징 살펴봄
  • 바이트 코드, java 플랫폼 등의 새로운 개념 이해
  • 간단한 예제 프로그램 학습
  • java 프로그래밍을 위한 개발 환경 설치
  • 중요한 객체 지향 개념인 추상화와 클래스에 대해 정리

학습 목표


  1. java 언어의 특징 나열
  2. 바이트 코드, java 플랫폼에 관해 설명 가능
  3. java 프로그래밍을 위한 개발 환경 준비
  4. 객체와 클래스 구별 가능



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 프로그램의 실행

  • 실행 과정 image
    1. Java 소스 파일 작성
    2. 컴파일러 이용해 소스파일 컴파일 시 클래스 파일 생성
      • jdk에 컴파일러 존재
      • .java 파일 -컴파일→ .class 파일
      • 자바는 완전한 객체 지향 언어기 때문에 자바 프로그램 작성한다는 것 = 클래스를 작성하는 일
      • 클래스가 소스프로그램에 존재 시 각 클래스마다 클래스 파일이 컴파일 과정을 통해 만들어짐
    3. 클래스 파일이 자바 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 플랫폼 설치 필요 image

2-2. Java 플랫폼

  • Java VM
    • Java 프로그램의 실행 환경을 제공하는 가상 기계(소프트웨어 환경) image
      • Java 프로그램의 구동 엔진
      • Java 프로그램 실행에 필요한 사항을 관리
      • 메모리 정리를 자동으로 수행
        • 가비지 컬랙션
        • 메모리 할당 받은 후 메모리를 더 이상 사용하지 않을 때 프로그램 상에서 운영체제로 반환 필요
  • Java API(Application Programing Interface)
    • 프로그램의 개발에 필요한 클래스 라이브러리
    • 패키지(클래스 묶음)들이 계층 구조로 분류되어 있음
      • 서브 패키지 존재

2-3. JDK의 설치

  1. Java 홈페이지에서 다운로드 후 설치
    • Java SE Development Kit(JDK) 15 설치
  2. 환경 변수 PATH 수정
    • C:\Program Files\Java\jdk-15.0.1\bin 추가
      • 컴파일 명령, 자바 실행 명령 등 개발 툴 존재
  3. 환경 변수 JAVA_HOME 생성
    • C:\Program Files\Java\jdk-15.0.1 대입

2-4. Eclipse 설치

  1. Eclipse 홈페이지에 접속
  2. Eclipse IDE for Java Developers
    • 압축 파일 다운
    • eclipse-java-2020-12-R-win32-x86_64.zip
  3. 적당한 곳에서 압축파일 풀면 설치됨
    • 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()을 수행
  • 실행
    1. 프로그램 작성
      • Hello.java 파일 저장
    2. 컴파일 명령
      • javac Hello.java
        • 컴파일 명령 실행 시 class 파일 생성
        • 클래스 이름.class 생성
    3. 실행 명령
      • 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!");
	}
}

Google Cloud SDK 설치 및 gcloud, gsutil 명령어

[Java 프로그래밍] 2강 - JAVA 기본 문법