기본 콘텐츠로 건너뛰기

방송대 방통대 Java프로그래밍 1강 - Java와 객체지향 프로그래밍 - 요약 노트 시험족보 예상문제 - 올에이클래스

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

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

Java 언어가 등장한 배경과 주요 특징을 살펴보고, JVM과 Java API로 구성되는 Java 플랫폼 및 소스 코드의 실행 과정을 학습한다. 이어서 JDK와 이클립스를 이용한 개발·배포 절차, 클래스와 객체를 중심으로 한 객체지향 프로그래밍의 기본 개념을 정리한다.

1. Java 언어의 기원과 발전

그린 프로젝트와 Oak

Java는 Sun Microsystems의 제임스 고슬링(James Gosling)이 주도해 개발한 언어이다. 출발점은 1990년의 그린 프로젝트이며, 당시 개발 언어의 이름은 Oak였다. 이후 1995년에 Java와 웹 브라우저 HotJava가 발표되었고, Java라는 이름은 원두를 의미하는 말에서 유래하였다.

주요 발전 과정

시기주요 내용
1990년그린 프로젝트 시작, Oak 언어 개발
1995년Java와 HotJava 발표
1996년 1월JDK 1.0 발표
1998년Java 2 SDK, SE 1.2 발표
2009년Oracle이 Sun을 인수
2014년Java Platform, JDK SE 8 발표
2023년 9월Java SE 21 발표

Java의 역사는 특정 운영체제에 종속되지 않는 실행 환경과 객체지향 개발 방식을 중심으로 발전해 온 과정이다. 언어 자체뿐 아니라 개발 도구와 실행 환경을 포함하는 플랫폼이 함께 제공된다는 점이 중요하다.

Java의 시작은 Sun Microsystems, 제임스 고슬링, 그린 프로젝트, Oak라는 네 키워드로 연결해 기억한다.

2. Java 언어의 주요 특징

플랫폼 독립성

Java는 운영체제와 하드웨어 플랫폼에 독립적으로 프로그램을 실행하는 것을 목표로 한다. Java 소스는 특정 운영체제의 기계어가 아니라 Java 가상 머신이 이해하는 바이트코드로 컴파일되며, 각 운영체제에 맞는 Java 플랫폼이 이 바이트코드를 실행한다.

객체지향성과 안정적인 프로그램 작성

  • 완전한 객체지향 프로그래밍 언어로서 클래스와 객체를 중심으로 프로그램을 구성한다.
  • 데스크톱 응용뿐 아니라 웹과 네트워크 프로그램을 만들기 쉽다.
  • 변수 사용에서 엄격한 자료형 검사를 수행하여 형식 오류를 줄인다.
  • 예외 처리 기능을 제공하여 실행 중 발생할 수 있는 문제를 체계적으로 다룬다.
  • 멀티스레드를 지원하여 여러 작업의 흐름을 다룰 수 있다.

플랫폼 독립성은 실행 환경이 필요 없다는 뜻이 아니다. 같은 바이트코드를 실행하려면 사용 중인 운영체제에 맞는 Java 플랫폼이 설치되어 있어야 한다.

3. Java 플랫폼의 개념과 구성

Java 플랫폼

Java 플랫폼은 Java 프로그램을 개발하고 실행하기 위한 환경이다. C로 작성된 프로그램은 일반적으로 운영체제와 하드웨어를 직접 대상으로 컴파일되지만, Java 프로그램은 운영체제 위에 설치된 Java 플랫폼을 거쳐 실행된다. 따라서 Windows, Linux, macOS 등 사용 중인 운영체제에 맞는 Java 플랫폼을 설치해야 한다.

JVM

JVM(Java Virtual Machine)은 Java 프로그램에 실행 환경을 제공하는 가상 기계이며 Java 프로그램의 구동 엔진이다. 프로그램 실행에 필요한 자원을 관리하고, 메모리 정리 기능인 가비지 컬렉션도 수행한다. 플랫폼마다 JVM 구현은 다르지만 같은 바이트코드를 실행한다는 공통 역할을 가진다.

Java API

Java API는 프로그램 개발에 필요한 클래스 라이브러리이다. 자주 필요한 기능을 미리 만들어 패키지 형태로 제공하므로 개발자는 모든 기능을 처음부터 구현하지 않고 재사용할 수 있다.

구성 요소역할
Java VM바이트코드 실행, 구동 엔진, 자원·메모리 관리
Java API개발에 필요한 표준 클래스 라이브러리 제공
운영체제해당 운영체제용 Java 플랫폼이 동작하는 기반

Java 플랫폼의 핵심은 실행을 담당하는 JVM재사용 기능을 제공하는 Java API이다.

4. Java 소스와 바이트코드의 실행 과정

.java 파일과 .class 파일

개발자가 작성한 Java 소스 파일의 확장자는 .java이다. 컴파일러는 소스 파일을 컴파일하여 .class 확장자를 가진 클래스 파일을 만든다. 클래스 파일에는 특정 운영체제의 기계어가 아니라 Java VM이 실행할 수 있는 바이트코드가 저장된다.

  1. HelloWorld.java와 같은 Java 소스 파일을 작성한다.
  2. Java 컴파일러가 소스를 컴파일하여 HelloWorld.class를 생성한다.
  3. 운영체제에 맞게 설치된 JVM이 클래스 파일의 바이트코드를 실행한다.
  4. 프로그램의 결과가 화면이나 다른 출력 장치에 나타난다.
Java 소스 파일(.java)
        ↓ 컴파일
바이트코드 파일(.class)
        ↓ 실행
Java VM → 운영체제 → 하드웨어

소스 코드와 바이트코드를 구분해야 한다. .java는 사람이 작성하는 소스이고, .class는 컴파일 결과이며 JVM이 실행하는 코드이다.

5. JDK 설치와 명령행 실행

JDK의 의미

JDK(Java Development Kit)는 Java 프로그램을 개발하기 위한 도구 모음으로, Java SDK라고도 부른다. 컴파일러와 디버거 같은 개발 도구뿐 아니라 Java 프로그램에서 사용하는 클래스 라이브러리를 포함한다. 강의록에서는 Oracle Java 홈페이지에서 운영체제에 맞는 JDK 21을 내려받는 절차를 제시한다.

컴파일과 실행 명령

소스 파일은 텍스트 편집기로 작성할 수 있다. 명령 프롬프트에서 javac 명령으로 컴파일하고, java 명령으로 클래스 파일을 실행한다.

javac Hello.java
java Hello

첫 번째 명령은 Hello.java를 컴파일해 Hello.class를 만들고, 두 번째 명령은 JVM을 통해 Hello 클래스를 실행한다. 실행 명령에는 일반적으로 .class 확장자를 적지 않는다.

환경 변수

어느 폴더에서나 개발 도구를 실행하려면 JDK의 bin 폴더 경로를 PATH 환경 변수에 추가한다. 강의록의 예에서는 C:\Program Files\Java\jdk-21\bin을 추가하고, JDK 설치 위치를 나타내는 JDK_HOMEC:\Program Files\Java\jdk-21을 지정한다.

javac소스 컴파일, java컴파일된 클래스 실행 명령이다.

6. 이클립스 설치와 작업 공간

이클립스의 역할

이클립스(Eclipse)는 무료 오픈소스 프로그램 개발 도구이다. Java 개발을 위해서는 Eclipse IDE for Java Developers를 설치한다. 이클립스 홈페이지에서 실행 설치 파일이나 압축 파일을 내려받아 설치할 수 있다.

워크스페이스

이클립스를 시작할 때 작업 공간인 워크스페이스(workspace)를 지정한다. 워크스페이스는 프로젝트 폴더, 소스 코드, 컴파일된 클래스 파일 등 개발 과정에서 만들어지는 자원을 저장하는 장소이다. 프로젝트가 여러 개여도 하나의 워크스페이스 안에서 체계적으로 관리할 수 있다.

JDK는 Java 개발과 실행을 위한 기본 도구이고, 이클립스는 이 도구들을 편리하게 사용할 수 있게 돕는 통합 개발 환경이다. 두 역할을 혼동하지 않는다.

7. 이클립스를 이용한 Java 프로젝트 개발

프로젝트와 패키지 생성

  1. File → New → Java Project를 선택해 Java 프로젝트를 만든다.
  2. 프로젝트에서 New → Package를 선택해 클래스를 담을 패키지를 만든다.
  3. 패키지에서 New → Class를 선택해 Java 클래스를 생성한다.
  4. main() 메소드를 가진 클래스를 실행한다.

패키지는 관련 클래스를 묶는 구성 단위이고, Java 프로그램은 클래스를 단위로 작성한다. 이클립스에서는 소스 파일을 저장하면 자동으로 컴파일되어 .class 파일이 생성된다.

클래스와 파일 이름

public 클래스의 이름이 Main이면 소스 파일은 Main.java로 저장해야 한다. 클래스 이름과 파일 이름을 일치시키는 규칙은 Java 소스 구성을 이해하는 기초이다.

이클립스의 기본 개발 흐름은 프로젝트 → 패키지 → 클래스 → main() 실행이다.

8. Java 소스의 구성과 주석

세 가지 주석

형식의미
/* ... */여러 줄에 걸친 일반 주석
/** ... */소스 설명서를 만들 때 사용하는 문서화 주석
// ...//부터 줄 끝까지 적용되는 한 줄 주석

주석은 프로그램의 실행과 무관하며, 소스 코드를 읽는 사람에게 설명을 제공한다. 문서화 주석은 Javadoc으로 소스 코드에 대한 설명서를 만들 때 활용한다.

클래스와 main() 메소드

package com;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, Java Application!");
    }
}

public class MainMain 클래스를 정의하고, public static void main(String[] args)는 Java 애플리케이션이 시작되는 메소드를 나타낸다. System.out.println()은 문자열을 표준 출력으로 내보낸다.

9. Java 애플리케이션 실행과 배포

이클립스에서 실행

main() 메소드를 가진 클래스를 이클립스의 실행 버튼이나 Run 메뉴로 실행할 수 있다. 실행 결과는 이클립스의 콘솔 영역에서 확인한다. 이 과정에서도 내부적으로는 소스 컴파일과 JVM 실행이 이루어진다.

JAR 파일로 배포

배포는 개발한 Java 프로그램을 묶어 외부에서 실행할 수 있는 형태로 내보내는 것이다. 실행에 필요한 클래스 파일을 묶어 확장자가 .jar인 파일을 만들 수 있다. 이클립스에서는 프로젝트를 마우스 오른쪽 버튼으로 선택한 뒤 Export를 실행하고, 내보낼 유형과 JAR 파일의 경로 및 이름을 지정한다.

java -jar my_project.jar

실행 가능한 JAR 파일은 명령행에서 java -jar 명령으로 실행할 수 있다. 소스 파일을 그대로 전달하는 것이 아니라 실행에 필요한 클래스 파일과 관련 자원을 하나의 배포 단위로 묶는다는 점이 중요하다.

.class는 한 클래스의 컴파일 결과이고, .jar는 여러 클래스 파일과 실행에 필요한 자원을 묶을 수 있는 배포 파일이다.

10. 객체지향 프로그래밍의 기본 개념

추상화

추상화는 구체적인 모든 사실을 그대로 다루는 대신, 전형적이고 필요한 부분만 추려 사물을 이해하고 표현하는 것이다. 여러 종류의 승용차, 버스, 트럭은 모양과 용도가 다르지만 공통된 특징을 뽑아 자동차라는 개념으로 표현할 수 있다.

클래스와 객체

클래스는 객체를 만들기 위한 모형 또는 틀이다. 공통적인 특징을 가진 객체를 추상화하는 수단이며, 객체의 상태는 필드로, 객체의 행위는 메소드로 구현한다. 객체는 특정 클래스로부터 만들어진 인스턴스이다.

개념설명
추상화공통적이고 필요한 특징을 추려 개념으로 표현하는 과정
클래스객체를 만들기 위한 모형 또는 틀
필드객체의 상태나 데이터를 표현하는 구성 요소
메소드객체의 기능이나 행위를 표현하는 구성 요소
객체특정 클래스로부터 만들어진 인스턴스

클래스는 설계도, 객체는 그 설계도로 만든 실체라고 이해한다. 하나의 클래스에서 서로 다른 상태를 가진 여러 객체를 만들 수 있다.

11. 객체지향 Java 프로그램과 C 프로그램의 비교

Java 프로그램의 기본 단위

Java에서 클래스는 프로그램 구성의 기본 단위이다. 객체의 데이터인 필드와 객체의 기능인 메소드를 클래스 안에 함께 캡슐화한다. 클래스 정의로부터 객체가 만들어지고, 객체들이 서로 상호작용하면서 프로그램이 동작한다.

성적 처리 예제

강의록의 C 예제는 두 학생의 영어 점수 배열과 수학 점수 배열을 따로 선언하고, 입력 함수와 출력 함수가 이 전역 데이터를 처리한다. 반면 Java 예제는 한 학생의 영어 점수 e, 수학 점수 m, 합계를 출력하는 output_grade() 메소드를 Grade 클래스에 묶는다.

class Grade {
    int e;
    int m;

    void output_grade() {
        System.out.println(e + m);
    }
}

public class Main {
    public static void main(String[] args) {
        Grade g1 = new Grade();
        Grade g2 = new Grade();

        g1.e = 90;
        g1.m = 85;
        g2.e = 80;
        g2.m = 80;

        g1.output_grade();
        g2.output_grade();
    }
}

g1g2는 같은 Grade 클래스에서 만들어졌지만 각자의 em 값을 가진 별도의 객체이다. 두 객체는 같은 메소드 구조를 공유하면서 각 객체에 저장된 점수의 합을 출력한다. 이처럼 데이터와 그 데이터를 처리하는 기능을 클래스 안에 함께 구성하는 것이 Java 객체지향 프로그램의 핵심이다.

C와 Java의 비교는 어느 언어가 무조건 우수하다는 뜻이 아니라 프로그램을 조직하는 관점의 차이를 보여 준다. Java 예제에서는 학생별 데이터와 기능을 객체 단위로 묶어 표현한다.

핵심 개념 정리

  • Java는 Sun Microsystems의 제임스 고슬링이 개발했으며, 그린 프로젝트의 Oak에서 출발하였다.
  • Java는 플랫폼 독립성, 객체지향성, 엄격한 자료형 검사, 예외 처리, 멀티스레드 지원 등의 특징을 가진다.
  • Java 플랫폼은 프로그램 실행을 담당하는 JVM과 표준 기능을 제공하는 Java API를 포함한다.
  • .java 소스는 컴파일되어 JVM이 실행하는 바이트코드가 담긴 .class 파일이 된다.
  • JDK는 컴파일러·디버거·클래스 라이브러리 등을 포함하는 Java 개발 도구 모음이다.
  • javac는 컴파일 명령이고 java는 클래스 실행 명령이다.
  • 이클립스에서는 프로젝트, 패키지, 클래스 순으로 개발 구조를 만들고 소스 저장 시 자동 컴파일한다.
  • public 클래스 이름과 .java 소스 파일 이름은 같아야 한다.
  • main() 메소드는 Java 애플리케이션의 시작점이다.
  • 실행에 필요한 클래스와 자원은 JAR 파일로 묶어 배포할 수 있다.
  • 추상화는 필요한 공통 특징을 추려 표현하는 과정이고, 클래스는 객체를 만드는 틀이다.
  • 필드는 객체의 상태, 메소드는 객체의 행위를 나타내며 객체는 클래스의 인스턴스이다.
  • 객체지향 Java 프로그램은 관련 데이터와 기능을 클래스 안에 함께 구성한다.

1강의 핵심 흐름은 Java 소스 → 컴파일 → 바이트코드 → JVM 실행추상화 → 클래스 정의 → 객체 생성 → 객체 간 상호작용이다. Java 플랫폼의 실행 구조와 객체지향의 구성 방식을 함께 이해하면 이후 문법과 클래스 설계를 학습할 기초가 마련된다.

예상문제 20선

1. Java 언어의 기원에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
Java는 Sun Microsystems의 제임스 고슬링이 주도했고, 1990년 그린 프로젝트에서 사용한 Oak 언어를 기원으로 한다.

2. Java 언어의 특징으로 옳지 않은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
Java 소스는 특정 운영체제의 기계어가 아니라 JVM용 바이트코드로 컴파일된다. 운영체제에 맞는 Java 플랫폼이 있으면 같은 바이트코드를 실행할 수 있다.

3. Java 프로그램의 실행 환경과 구동 엔진을 제공하고 메모리를 관리하는 구성 요소는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
JVM은 Java 바이트코드를 실행하는 가상 기계이며, 실행 자원과 메모리를 관리하고 가비지 컬렉션을 수행한다.

4. Java API에 대한 설명으로 가장 적절한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
Java API는 자주 필요한 기능을 구현한 표준 클래스 라이브러리이며 패키지로 묶여 제공된다.

5. Java 소스 파일과 컴파일 결과의 연결로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
개발자가 작성한 .java 파일은 컴파일러를 거쳐 JVM이 실행할 바이트코드가 담긴 .class 파일로 변환된다.

6. Hello.java를 명령행에서 컴파일하는 명령은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
javac는 Java 소스 컴파일러를 실행하는 명령이다. 컴파일된 Hello 클래스는 java Hello로 실행한다.

7. JDK에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
JDK는 Java Development Kit의 약자로 Java 프로그램 개발에 필요한 도구와 라이브러리를 묶어 제공한다.

8. PATH 환경 변수에 JDK의 bin 폴더를 추가하는 주된 이유는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
운영체제는 PATH에 등록된 경로에서 실행 파일을 찾는다. JDK의 bin을 추가하면 현재 폴더와 관계없이 개발 명령을 실행할 수 있다.

9. 이클립스의 워크스페이스에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
워크스페이스는 이클립스가 프로젝트와 관련 개발 자원을 저장하고 관리하는 작업 공간이다.

10. 이클립스에서 Java 프로그램을 개발하는 순서로 가장 적절한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
이클립스에서는 먼저 프로젝트를 만들고, 관련 클래스를 담을 패키지와 클래스를 만든 뒤 시작점인 main()을 실행한다.

11. public 클래스 이름이 Main일 때 올바른 소스 파일 이름은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
Java에서는 public 클래스의 이름과 소스 파일의 기본 이름이 같아야 한다. 대소문자도 일치해야 한다.

12. Java 애플리케이션의 실행 시작점을 나타내는 메소드는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
JVM은 정해진 형식의 main() 메소드를 애플리케이션의 실행 시작점으로 사용한다.

13. Javadoc용 소스 설명서를 만드는 데 사용하는 주석 형식은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
/** ... */는 문서화 주석이며 Javadoc으로 소스 코드 설명서를 생성할 때 사용한다.

14. Java 프로젝트 배포에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
배포는 개발한 프로그램을 외부에서 실행할 수 있게 묶어 내보내는 과정이며, Java에서는 여러 클래스와 자원을 JAR 파일로 만들 수 있다.

15. 객체지향에서 추상화의 의미로 가장 적절한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
추상화는 대상의 모든 세부 사항이 아니라 공통되고 필요한 특징을 골라 개념적으로 표현하는 과정이다.

16. 클래스와 객체의 관계에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
클래스는 공통 구조를 정의한 모형이고, 객체는 그 정의에 따라 만들어진 구체적인 인스턴스이다.

17. 객체의 상태와 행위를 각각 나타내는 클래스 구성 요소의 연결은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
클래스에서 필드는 객체가 가진 데이터를, 메소드는 객체가 수행하는 기능을 표현한다.

18. Grade g1 = new Grade(); 문장에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
new Grade()Grade 클래스의 인스턴스를 생성하고, 생성된 객체를 가리키는 값이 g1에 대입된다.

19. 강의록의 Java 성적 처리 예제에서 g1과 g2에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
g1g2는 동일한 클래스 구조와 메소드를 사용하지만 서로 다른 객체이므로 각자 영어·수학 점수를 저장한다.

20. 강의록의 C와 Java 성적 처리 예제가 보여 주는 객체지향 구성의 특징은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
객체지향 Java 예제는 영어·수학 점수라는 상태와 합계 출력이라는 행위를 Grade 클래스 안에 함께 캡슐화한다.

댓글