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

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

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



학습 개요


  • 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 플랫폼을 설치해야함

    image.png

Java 플랫폼의 구성

  • Java VM

    image.png

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

    Untitled

    1. Java 소스 파일 작성
    2. 컴파일러 이용해 소스파일 컴파일 시 클래스 파일 생성
      • jdk에 컴파일러 존재
      • .java 파일 -컴파일→ .class 파일
      • 자바는 완전한 객체 지향 언어기 때문에 자바 프로그램 작성한다는 것은 클래스를 작성하는 일이 됨
      • 클래스가 소스프로그램에 존재 시 각 클래스마다 클래스 파일이 컴파일 과정을 통해 만들어짐
    3. 클래스 파일이 자바 VM에서 실행되어 프로그램이 실행됨
      • 어떤 OS를 사용하던지 간에 호환되는 Java 플랫폼이 존재한다면 자바 프로그램 어디서든지 실행 가능
  • Java 소스
    • .java
      • Java 소스 프로그램의 확장자
  • 바이트 코드
    • .class
      • 바이트 코드 파일 확장자
    • 클래스 파일
    • Java 소스를 컴파일한 결과물
    • Java 플랫폼의 Java VM에서 실행 가능한 코드

JDK(Java Deveplopment Kit)의 설치

  • JDK, Java SDK
    • Java 플랫폼과 개발 도구의 묶음
      • 컴파일러, 디버거, 문서도구 등
        1. Java 홈페이지에서 다운로드 후 설치
    • 자신이 사용하는 운영 체제에 맞는 것을 선택
      1. JDK 설치 후 Java 프로그램의 실행
    • 소스 작성을 위해 텍스트 편집기 사용
    • 명령 프롬프트 창에서 컴파일 명령은 javac

      1
      
        javac Hello.java
      
    • 명령 프롬프트 창에서 실행 명령은 java

      1
      
        java Hello
      
  1. 환경 변수
    • PATH 변수 경로 추가
      • C:\Program Files\Java\jdk-21\bin
        • 컴파일 명령, 자바 실행 명령 등 개발 툴 존재
    • JAVA_HOME 변수 경로 추가
      • JDK 설치 폴더
      • C:\Program Files\Java\jdk-21

Eclipse 설치

  • Eclipse 홈페이지에 접속
    • 무료 오픈 소스 프로그램 개발 도구
  • Eclipse IDE for Java Developers
    • 설치용 파일(.exe) 또는 압축 파일(.zip) 다운로드
  • 설치 과정에서 작업 공간(workspace) 폴더 지정
    • workspace
      • 프로젝트 폴더, 소스 코드, 클래스 파일 등을 저장하는 장소

Eclipse 사용하여 Java 프로그램 개발하기

  1. Java Project 생성
    • File → New → Java Project
  2. 클래스가 저장될 패키지 생성
    • 프로젝트 → 마우스 오른쪽 버튼 → New → Package
  3. 패키지 안에 클래스 생성
    • Java 프로그램은 클래스 단위로 작성
    • 패키지 이름 → 마우스 오른쪽 버튼 → New → Class
    • 클래스 이름으로 파일 이름(.java) 정해짐
  4. Java 소스 저장 시 컴파일 되며, 클래스마다 .class 파일 생성됨
  5. 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()을 수행
  • 실행
    1. 프로그램 작성
      • Hello.java 파일 저장
    2. 실행
      • 실행 버튼 또는 Run 메뉴(Ctrl+ F11) 실행
      • 명령어 사용
        1. 컴파일 명령
          • javac Hello.java
            • 컴파일 명령 실행 시 class 파일 생성
            • 클래스 이름.class 생성
        2. 실행 명령
          • java Hello
          • main 함수를 가지고 있는 클래스 이름 입력 시 실행 가능
          • Hello 클래스에서 main() 메소드 실행

프로젝트 배포하기

  • 배포
    • 개발된 Java 프로그램을 묶어서 외부에서 실행 가능하게 내보내는 것
      • 실행에 필요한 클래스 파일을 묶어서 .jar 파일을 만들 수 있음
    • 프로젝트 → 마우스 오른쪽 버튼 → Export 선택
      • export 유형, jar 파일 경로 및 이름 지정

객체 지향 프로그래밍

클래스와 객체

  • 추상화

    image.png

    • 구체적인 모든 사실이 아니라 전형적이고 필요한 부분만을 추려서 사물을 이해하고 표현하는 것
    • 필요한 일부분만 간단히 표현
  • 클래스
    • 객체를 만들기 위한 모형 또는 틀
    • 공통적인 특징을 가지는 객체들을 추상화하기 위한 수단
    • 객체의 상태는 필드(데이터)로, 행위는 메소드로 구현
      • 동종의 객체들을 표현한 필드 정의
      • 데이터 필드를 가지고 메소드로 표현
    • 객체는 특정 클래스의 인스턴스
    • 추상화를 통해 프로그램 상에서 표현된 것
  • 인스턴스
    • 클래스가 실체화 된 것

객체 지향 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();
          }
      }
    
    • 객체 지향적 프로그래밍
    • 객체.함수이름



연습 문제


  1. 똑같은 바이트 코드가 Java 플랫폼이 설치된 다양한 하드웨어와 운영체제에서 수정 없이 실행될 수 있다. Java 언어의 특징 중에 다음 내용이 의미하는 것은?

    a. 플랫폼에 독립적

  2. Java 언어의 특징 중에 다음 내용이 의미하는 것은?

    1
    2
    
     public class A {  }
     class B {  }
    

    a. A.class와 B.class가 생성된다.

  3. “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)
  • 클래스는 동종 객체를 추상화시켜 표현한 틀이며, 데이터와 메소드로 구성됨
  • 객체는 특정 클래스의 인스턴스임

[파이썬 프로그래밍 기초] 1강 - 컴퓨터의 이해

[데이터 정보 처리 입문] 1강 - 데이터 분석과 컴퓨터