1. 자바(Java Programming Language)
1.1 자바란?
- 1996년 썬 마이크로시스템즈에서 개발한 객제지향 프로그래밍 언어
- 운영체제의 종류에 관계없이 실행이 가능하기 때문에, 운영체제에 따라 프로그램을 변경하지 않고도 실행가능
1.2 자바의 역사
- 1991년 썬의 엔지니어들에 의해서 고안된 Oak라는 언어에서부터 시작되었다.
- 가전제품에 탑재될 소프트웨어였으나, 인터넷의 등장으로 이름을 Java로 변경
1.3 자바 언어의 특징
1. 운영체제에 독립적이다
- 기존의 언어 -> 다른 운영체제에서 적용하기 위해 많은 노력 필요
- 가능한 이유 : 자바가상버신(JVM), 자바 응용 프로그램은 운영체제나 하드웨어가 아닌 JVM 만을 통해서 통신한다.
- JVM 은 운영체제에 종속적이어서 썬에서는 여러 운영체제에 설치할 수 있는 여러 JVM을 제공한다.
2. 객체지향언어이다.
- 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어
3. 비교적 배우기 쉽다
- 기본구문은 C++, 객체지향관련 구문은 small talk에서 가져옴
- 두 가지 언어의 장점을 취하면서 복잡하고 불필요한 부분 제거
4. 자동 메모리 관리
- 가비지컬렉터가 자동으로 메모리를 관리해주기 때문에 프로그래머가 따로 관리하지 않아도 됨
5. 네트워크와 분산처리 지원
- Java API를 통해 비교적 짧은 시간에 네트워크 관련 프로그램 개발 가능
6. 멀티쓰레드를 지원
- 일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현방법이 상이
- 자바의 멀티쓰레드 프로그램은 시스템과 관계없이 구현가능
- 여러 쓰레드에 대한 스케쥴링은 자바 인터프리터가 담당
7. 동적 로딩을 지원한다
- 자바로 작성된 어플리케이션 → 여러개의 클래스로 구성됨
- but 동적 로딩을 지원하기 때문에 모든 클래스가 아닌 필요한 시점의 클래스 로딩하여 사용 가능
- 일부 클래스가 변경되어도 전체 어플리케이션은 컴파일하지 않아도 됨
1.4 JVM(Java Virtual Machine)
- 자바를 실행하기 위한 가상 컴퓨터
자바 개발환경 구축하기
2.1 자바 개발도구(JDK) 설치하기
- 자바로 프로그래밍하기 위해서는 먼저 JDK(Java Development Kit)를 설치해야한다.
- https://www.oracle.com/kr/java/technologies/downloads/ 에서 다운로드
- JDK의 설치 이후, 설치된 디렉토리의 bin디렉토리를시스템 환경 변수의 Path에 경로를 추가해주어야한다.
Path는 OS가 파일의 위치(디렉토리)를 파악하는데 사용하는 경로이며,
path에 디렉토리를 등록하면 해당 디렉토리에 포함된 파일을 파일 경로없이 파일 이름만으로도 사용할 수 있다.
JDK의 bin 디렉토리에 있는 주요 실행파일들은 다음과 같다

- javac.exe - 자바 컴파일러, 자바 소스코드를 바이트코드로 컴파일한다
- java.exe - 자바 인터프리터, 컴파일러가 생성판 바이트코드를 해석하고 실행한다.
- javap.exe - 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환한다.
- jacadoc.exe - 자동문서생성기, 소스파일에 있는 주석을 이용하여 Java API 문서 자동 생성ㅇ
- jar.exe - 압축프로그램, 클래스파일과 프로그램의 실행에 관련된 파일을 하나의 jar 파일로 압축/해제
2.2 Java API 문서 설치하기
Java Development Kit 8 Documentation | Oracle 대한민국
다음 링크에서 압축폴더 다운로드 후, java 파일 내에서 압축을 해제한다.
doc 파일이 생성된다.
3. 자바로 프로그램 작성하기
3.1 Hello.java
class 클래스이름 {
/*
주석을 제외한 모든 코드는 클래스의 블럭{} 내에 작성해야 한다.
*/
}
- 자바의 모든 코드는 반드시 클래스 안에 존재해야 하며, 서로 관련된 코드들을 그룹으로 별도의 클래스를 구성하게 된다. 이 클래스들이 모여 하나의 Java 어플리케이션을 이룬다
class 클래스이름{
public static void main(String[] args) // main 메서드의 선언부
{
//실행될 문장들을 적는다.
}
}
- public static void main(String[] args) -> 이 부분은 main메서드의 선언부
- 프로그램 실행시 java.exe에 의해 호출될 수 있도록 똑같이 적어야 한다.
- 자바 어플리케이션은 main 메서드의 호출로 시작해서 첫문장부터 마지막 문장까지 수행을 마치면 종료된다
- 모든 클래스가 main method를 가지고 있어야 하는 것은 아니지만, 하나의 Java 어플리케이션에는 main메서드를 포함한 클래스가 반드시 하나는 있어야 한다.
- 하나의 소스 파일 = 하나의 클래스를 정의하는게 보통, but 2개 이상 정의할 경우, 소스파일의 이름은 public class와 같아야함. public class가 없으면 소스파일 내 아무 클래스의 이름으로 작성
- 잘된 예 (대소문자도 일치해야함)
- Hello2.java
- public class Hello2 {}
- class Hello3 {}
- Hello2.java
- class Hello2 {}
- class Hello3 {}
- Hello2.java
- 잘못된 예
- Hello2.java // 하나의 소스파일에 둘 이상의 public class 존재 X
- public class Hello2 {}
- public class Hello3 {}
- Hello3.java // 소스파일의 이름이 public class와 일치 X
- public class Hello2 {}
- class Hello3 {}
- Hello2.java // 하나의 소스파일에 둘 이상의 public class 존재 X
- 잘된 예 (대소문자도 일치해야함)
3.2 자주 발생하는 에러와 해결방법
cannot find symbol || cannot resolve symbol
- 지정된 변수나 메소드를 찾을 수 없다는 뜻
- 선언되지 않은 변수나 메소드를 사용하거나 메소드 이름을 잘못 사용한 경우
- 대소문자 일치 여부도 확인
‘;’ expected
- 세미 콜론이 필요한 곳에 없다는 뜻
Exception in thread “main” java.lang.NoSuchMehondError: main
- main 메서드를 찾을 수 없다는 뜻
- 실제로는 선언부에 오타가 존재하는 경우 발생
Exception in thread “main” java.lang.NoClassDefFoundError:Hello
- Hello 라는 클래스를 찾을 수 없다는 뜻
illegal start of expression
- 괄호를 닫지 않음
- if, for문의 문법적 오류 등
class, interface, or enum expected
- 보통 괄호의 ‘{’ ‘}’ 개수가 일치 하지 않는 경우에 발생한다.
3.3 자바 프로그램의 실행과정
- 콘솔에서 아래와 같이 Java 어플리케이션을 실행 했을 때 내부적인 실행 순서는 다음과 같다
c:\\jdk1.8\\work>java Hello
1. 프로그램의 실행에 필요한 클래스(*.class파일)를 로드한다.
2. 클래스파일을 검사한다.(파일형식, 악성코드 체크)
3. 지정된 클래스(Hello)에서 main(String[] args)를 호출한다.
main 메서드(첫줄 ~마지막) 실행 → 프로그램 종료 → 사용했던 자원 반환
3.4 주석(comment)
- 코드를 이해하기 위해 덧붙여놓는 글
범위 주석 - ‘/’ 와 ‘/’ 사이의 내용은 주석으로 간주
한 줄 주석 - ‘//’부터 라인 끝까지의 내용은 주석으로 간주
/*
Date : 2013.12.23
Source : Hello.java
Author : 남궁성
*/
class Hello
{
public static void main(String[] args) /* 프로그램 시작 */
{
System.out.println("Hello World."); // Hello, world를 출력
}
- 주의해야할 점은 끈따옴표(”) 내부의 주석은 주석이 아닌 문자열로 인식한다
class Hello
{
public static void main(String[] args) /* 프로그램 시작 */
{
System.out.println("Hello // 주석 아님// World."); // Hello, world를 출력
}
'Java > Java 스터디' 카테고리의 다른 글
| Chapter 06. 객체지향 프로그래밍 I (part 1~2) (0) | 2023.02.21 |
|---|---|
| Chapter 05. 배열 (0) | 2023.02.15 |
| Chapter 04. 조건문과 반복문 (0) | 2023.02.15 |
| Chapter 03. 연산자 (0) | 2023.01.29 |
| Chapter 02. 변수 (1) | 2023.01.12 |