https: github.com accidentlywoo java wiki _new - accidentlywoo/java GitHub Wiki

Welcome to the java wiki!

자바 프로그램 기초

자바 프로그램 연산자

자바 프로그램 제어문

객체지향

클래스

자바 Modifier와 생성자

메서드 Overloading과 매개변수

자바의 상속

추상메서드 추상클래스

인터페이스와 패키지

예외처리

java.lang 패키지

java.util 패키지

자바 언어의 탄생

- 1991년

Green Project에서 가정용 전자기기에서 사용되는 작은 컴퓨터 언어를 디자인함.

  • 가정용 전자기기에 사용되는 언어는 작고 견고해야 하며, 신뢰할 수 있는 코드를 필요로 함.
  • 다른 CPU가 선택될 수 있기 때문에 특정 디바이스에 종속되지 않아야 함. -> Virtual Machine에서 동작하는 중간코드를 생성하여 이식성이 높은 언어를 디자인함.

- 1992년

C++기반으로 만듬 : 절차지향 + 객체지향 -> Oak : 완벽한 객체지향 언어

- 1994년

가전제품에서 주목받지 못하고 웹으로 시선을 돌림 World Wide Web의 발전과 Mosaic의 사용에 주목 -> 자바를 기반으로한 웹 브라우저 제작 : HotJava브라우저로 발전함

HotJava : Applet이라 불리는 자바의 기능을 보여주기 위해 브라우저가 중간코드(Bytecode)를 해석할 수 있도록 만듦.

- 1995년

Netscape 2.0에서부터 자바가 지원됨. 많은 업체들이 자바를 지원하게 됨.

자바의 특징

단순, 객체지향, 분산 처리, 인터프리터, 견고, 안전, 플랫폼 독립, 높은 성능, 멀티스레드, 동적

단순

C언어와 C++언어의 복잡한 기능을 제외하여 코드를 단순하게 작성할 수 있음. C 절차지향언어 + C++ 객체지향 요소

-> C++의 전위처리, 포인터 사용, 다중 상속, 구조체, goto문 사용, 연산자 중복 기능..등을 제외 가비지 컬렉터(Garbage Collector)에 의한 자동 메모리 관리로 할당된 메모리 해제를 신경쓰지 않아도 됨.

-> C와 C++언어에 비해 작고 간편

객체지향

C++을 기초로 하여 만들어진 언어.

객체지향을 하게 되면 재사용성(Reusability)을 높일 수 있음

  • 단순히 코드의 재사용을 넘어선 객체의 재사용을 뜻함.
  • 프로그램 개발에 필요한 수많은 클래스 라이브러리들을 API로 제공함.

분산처리

분산 환경에서 TCP/IP등의 프로토콜을 통해 효율적으로 실행할 수 있도록 설계된 언어.

  • TCP/IP 네트워크 기능 내장
  • HTTP, FTP 등과 같은 프로토콜을 쉽게 사용할 수 있도록 라이브러리 제공
  • 서로 다른 컴퓨터 상의 객체들도 원격으로 호출하여 실행할 수 있는 원격 메서드 호출과 관련된 RMI(Remote Method Invocation) 기능의 라이브러리 제공

인터프리터

  1. 소스코드(.Java)

--컴파일(Compiling javac)-->

  1. 중간코드(.class):바이트코드=클래스파일

--기계어로 해석(Interpreting:java)--> 실행.

-> 자바는 컴파일 언어임과 동시에 인터프리터 언어라고 할 수 있다.

견고

다양한 플랫폼(os)상에서 실행되기 위해 에러의 원인이 되는 요소들을 제거하거나 자동으로 해결

  • 포인터를 사용하지 않음.
  • 자동으로 가비지 컬렉션(Garbage Collector)기능을 수행함
  • 엄격한 데이터 타입의 검사를 통해 에러를 조기에 발견함
  • 실행 시간에 발생하는 에러를 처리함.

안전

컴파일 시에 엄격하게 데이터 타입을 검사함으로써 프로그램 실행 시 발생할 수 있는 비정상적인 상황을 미리 방지

  1. .java(소스코드)

  2. 컴파일러(Compile)

  3. .class(바이트 코드)

-- 실행 시--

    • 클래스 로더 : 코드 분리 : 자신의 컴퓨터에서 온것인지, 다른 컴퓨터에서 온것인지 먼저 분리
    • 바이트 코드 검증기 : 코드 검증 : 문제가 없을때 인터프리터로 넘어감
  1. 인터프리터(Interpreter)

-> 실행.

플랫폼 독립적

사용하는 운영체제나 CPU등의 하드웨어 사양에 관계 없이 실행될 수 있음.

  1. 자바 프로그램 --자바 소스코드(.java)-->

  2. 자바 컴파일러 --자바 바이트 코드(.class)-->

  3. 자가 가상머신 --기계어코드-->

-> 플랫폼 독립적

  1. Unix, Win, Mac..

높은 성능

가비지 컬랙션(Garbage Collection)기능이 추가되어 있어 자동으로 메모리 관리가 가능

  • 메모리가 할당된 객체의 상태를 추적 관리
  • 더 이상 참조되지 않으면 자동으로 할당된 메모리 해제

멀티스레드(MultiThread)

스레드 : 독자적으로 수행하는 하나의 작은 프로그램

멀티스레드 : 한 번에 여러 개의 스레드가 동시에 수행되는 과정, 하나의 CPU가 여러 개의 프로그램을 동시에 수행하도록 함 -> 수행 속도를 빠르게 함

동적(Dynamic)

  • 자바 언어는 변화되는 환경에 잘 적응되도록 설계됨
  • 기존의 프로그램에 영향을 주지 않고, 라이브러리에 새로운 메서드나 속성들을 추가할 수 있음
  • 프로그램과 프로그램에서 사용되는 라이브러리와의 연결을 실행시간에 수행함.

자바 플랫폼의 종류

플랫폼(Platform)이란 프로그램이 실행될 수 있는 하드웨어 및 소프트웨어 환경을 의미

  • 일반적인 플랫폼 : 컴퓨터 하드웨어 : 하드웨어를 제어하는 운영체제

  • 자바 플랫폼 : 소프트웨어만으로 구성됨 : JDK(Java Development Kit)로 설치됨 : JAVA SE, JAVA EE, JAVA ME

  1. Java SE(Standard Edition) 가장 기본이 되는 에디션으로써, 자바 언어 대부분의 패키지가 포함됨.

  2. Java EE(Enterprise Edition) 현업에서 사용되는 API들이 집약된 에디션 ex) 웹프로그래밍에서 가장 많이 사용되는 JSP,Servlet,JDBC,JNDI,EJB등의 많은 기술들이 포함됨.

  3. Java ME(Micro Edition) 모바일 기기 등에서 사용되는 API가 포함된 에디션 스마트폰의 자체적인 OS로 인해 자체 API(안드로이드 SDK, ios SDF)의 사용 -> 현재는 거의 사장됨.

일반적인 플랫폼 구조

  1. 애플리케이션(Application)

  2. 운영체제(OS) : Windows, Unix, Linux, Macintosh 어플리케이션이 하고자하는 일을 하드웨어에 전달 -> 통신을 담당

  3. 다양한 하드웨어 플랫폼 : Intel,SPARC,PowerPC

자바 플랫폼 구조

  1. 자바 프로그램 JVM위에서 동작

  2. 자바 가상머신(JVM) : 자바 API(클래스 라이브러리)

  3. 다양한 하드웨아 플랫폼

자바 가상 머신(Java Virtual Machine)

  1. 자바 프로그램
  • 자바 언어로 쓰여진 애플리케이션을 실행시키는 기능 수행
  1. 자바 가상 머신
  • 자바로 쓰여진 애플리케이션과 특정 운영체제 중간에 존재하여 서로를 분리함으로써 애플리케이션이 운영체제에 영향을 받지 않고 동작할 수 있는 환경을 제공
  1. OS(win,linux,unix) 단! JVM은 운영체제와 직접적으로 통신을 해야 하기 때문에 운영체제에 맞는 JVM을 설치해 주어야 함.

자바 API(Application Programming Interface)

자바 플랫폼에서 제공

  • 프로그래머가 필요로 하는 기본적인 클래스(Class)들을 거대한 라이브러리로 미리 만들어서 제공하는 것
  • 미리 제공되는 클래스를 표준 클래스라고 함.
  • 자바 언어 자체는 작고 단순한 구조를 갖지만, 많은 기능들을 API에서 제공하고 있음
  • 자바 패키지 : java.applet, java.awt, xjava.io, java.lang, java.net, javax.swing, java.utill
  1. java.applet : 애플릿 작성에 필요한 기능을 모아 놓은 패키지
  2. java.awt : GUI작성과 관련된 패키지.Javax.swing패키지와 함께 자바 GUI애플리케이션 작성 시 필수적으로 사용함. 버튼, 텍스트필드, 메뉴 등 관련 컴포넌트와 이벤트 기능을 제공함.
  3. java.applet : 자바 입출력 기능과 관련된 패키지. 파일이나 버퍼 등의 입출력 기능을 제공함.
  4. java.lang : 자바 언어의 기초적인 사항을 정의한 클래스와 관련된 패키지.Object클래스, 문자열 관련, 시스템 관련, 멀티스레드 관련 기본적인 기능을 포함함.
  5. java.net : 자바의 네트워크 관련 패키지. 이 패키지 내에는 소켓과 관련된 기능을 제공함.
  6. javax.swing : java.awt패키지와 더불어 자바 GUI애플리케이션 기능과 관련된 패키지.java.awt포함 내용보다 다양하고, 융통성 있는 컴포넌트를 제공함.
  7. java.util : 유틸리티성 기능과 관련된 패키지. 날짜 표현이나 여러 자료형을 하나로 취급하는 컬렉션과 관련된 기능을 제공함.

자바 개발 환경(JDK)

  • 자바 프로그램 개발을 위한 자바 개발환경 설치
  • 사용하려는 분야에 따라 세 가지 플랫폼으로 구분됨.

JDK와 SDK

  • 자바 개발 환경(JDK)과 실행환경(JRE:Java Runtime Environment)을 나누어 설치할 수 있습니다. JDK는 개발 및 실행에 필요한 모든 도구가 들어있으며, JRE는 JDK에서 몇 가지 도구를 제외한, 말 그대로 실행만을 위한 도구들로 구성되어 있습니다. 따라서 JRE만으로는 작성된 소스를 컴파일 할 수 없으므로 컴파일러를 포함한 SDK(Software Development Kit)를 설치해야 합니다.

  • JDK와 SDK는 동일한 의미의 용어로 이해하면 됩니다. 다만 JDK1.2버전부터 JDK를 SDK라는 용어와 혼용해서 부르는데, 이는 기존의 1.x버전과 비교했을 때, 상당히 많은 API가 추가되었기 때문에 새로운 개념의 JDK라는 의미로 SDK라고 부릅니다. 이는 마치 자동차 회사에서 기존의 브랜드에서 전혀 다른 디자인과 성능을 가진 새로운 브랜드를 발표할 때,'올 뉴 xx'이라는 이름으로 부르는 것과 동일합니다.

JDK 폴더 구조

  • bin : 자바 개발 환경과 관련된 각종 명령들을 포함한 폴더. 자바 컴파일러와 인터프리터 명령도 여기에 포함됨
  • include : 플랫폼 별로 필요한 JDK의 각종 헤더 파일들을 포함한 폴더
  • jre : 자바 실행 환경 관련 명령어와 라이브러리를 포함한 폴더
  • lib : 자바 개발 환경에서 사용될 라이브러리를 포함한 폴더

bin폴더에서 주요 자바 명령어 보기

  • javac(자바소스 바이트코드로 번역), java(자바 애플리케이션 클래스를 해석하여 실행 결과를 보여 줌), appletviewer(일종의 작은 웹 브라우저), jdb(디버거), javadoc(자바 소스 파일에 대한 html파일을 생성하고, 소스 프로그램의 클래스나 인터페이스, 생성자, 메서드, 클래스 계층 구조에 대한 html파일을 생성함.), javap(컴파일 후 생성된 자바 클래스 파일을 역컴파일하여 클래스 내의 정보를 추적할 수 있도록함.), jar(다수 개의 자바 클래스 파일들을 하나의 .jar라는 파일로 압축하여, 네트워크를 통한 프로그램 전송 시 전송 시간을 줄일 수 있음)

환경 변수 설정

  • bin 폴더 내의 명령어들은 $bin 폴더 안에서만 사용할 수 있음
  • 시스템 환경 변수의 path변수에 명령어들이 들어 있는 폴더를 추가해야 함. -> "환경 변수에 path추가" -> 자바의 컴파일, 인터프리트 등에 필요한 명령들을 운영체제에 등록함 -> 모든 경로에서 자동으로 그 파일을 인식할 수 있게 만드는 것.

JDK Document사용

자바 API Document

  • 기본적인 기능을 자바 클래스로 구현하여 제공하는 클래스 라이브러리
  • 자바 소스 형태가 아닌 바이트 코드로 제공 -> 라이브러리를 사용하기 위해서는 라이브러리에 포함된 클래스나 인터페이스 정보, 메서드, 생성자, 변수 등이 필요함.
  • HTML파일로 문서화하여 Oracle 홈페이지에서 제공함.

이클립스(Eclipse)

일반 텍스트 편집기들은 실시간 문법 체크나 디버깅기능, 소스 자동 생성 기능 등이 제공되지 않음 클래스명, 메서드명, 변수명 등을 모두 외워서 작성해야 하는 번거로움이 있음. -> 이클립스를 사용하면 이클립스가 jdk를 자동적으로 인식하기 때문에 환경변수에 path지정을 굳이 하지 않아도 된다.