반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. 자바 언어의 탄생

1) 1991년

- 썬마이크로프로그램 그린 프로젝트에서 만들어짐

- 그린 프로젝트에서 가정용 전자기기에서 사용되는 작은 컴퓨터 언어를 디자인

- 가정용 전자기기에 사용되는 언어는 작고 견고해야 함

- 신뢰할 수 있는 코드를 필요함

- 다른 CPU가 선택될 수 있기 때문에 특정 디바이스에 종속되지 않아야 함

- Virtual Machine에서 동작하는 중간코드를 생성하여 이식성이 높은 언어를 디자인함

 

2) 1992년

- 절차지향과 객체지향을 혼용해서 사용한 C++ 기반으로 개발했지만, 한계가 있어서 완벽한 객체지향 언어인 Oak를 만들고, Java라는 언어로 바꿈.

 

3) 1994년

- World Wide Web의 발전과 Mosaic의 사용에 주목

- 자바를 기반으로 한 웹 브라우저 제작 -> HotJava 브라우저로 발전함

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

 

4) 1996년

- Netscape 2.0에서부터 자바가 지원됨

- IBM, Symantec, Inprise, MS 등 많은 업체들이 자바를 지원하게 됨

 

2. 자바 언어의 특징(Write Once, Run Everywhre, WORE)

1) 단순

- 자바는 단순하다.

- C 언어와 C++ 언어의 복잡한 기능을 제외하여 코드를 단순하게 작성할 수 있음

- 가비지 컬렉터에 의한 자동 메모리 관리로 할당된 메모리 해제를 신경쓰지 않아도 됨

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

- 더 이상 사용되지 않는 객체를 쓰레기로 간주하여 메모리에서 자동으로 정리 -> 가비지 컬렉터

 

2) 객체지향(Object-Oriented)

- 자바는 객체지향적이다.

- 자바는 객체지향 개념이 적용된 C++을 기초로 하여 만들어진 언어

- 언어라는 객체를 사용해서 프로그램을 작성하도록 하는 언어

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

- 단순힌 코드의 재사용을 넘어선 객체의 재사용을 뜻함

- 프로그램 개발에 필요한 수많은 클래스 라이브러리들을 API로 제공

 

3) 분산 처리

- 자바는 분산처리(Distributed)에 용이

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

- TCP/IP 네트워크 기능 내장

- HTTP, FTP 등과 같은 프로토콜을 쉽게 사용할 수 있도록 라이브러리 제공

- 서로 다른 컴퓨터 상의 객체들도 원격으로 호출하여 실행할 수 있는 원격 메서드 호출과 관련된 RMI(Remote Method Invocation) 기능의 라이브러리 제공

 

4) 인터프리터

- 자바는 인터프리터(Interpreter)에 의해 실행

- 소스코드(.java) -> 컴파일(Compile, javac) -> 중간코드(.class, 바이트코드 = 클래스 파일) -> 기계어로 해석 -> 실행

- 컴파일 언어임과 동시에 인터프리터 언어인 자바다.

 

5) 견고

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

- 포인터를 사용하지 않음

- 자동으로 가비지 컬렉션기능을 수행함

- 엄격한 데이터 타입의 검사를 통해 에러를 조기에 발견

- 실행 시간에 발생하는 에러 처리

 

6) 안전

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

 

7) 플랫폼 독립

- 사용하는 운영체제나 CPU 등의 하드웨어 사양에 관계 없이 실행 가능

 

8) 높은 성능

- 가비지 컬렉션 기능이 추가되어 있어 자동으로 메모리 관리

- 메모리가 할당된 객체의 상태를 추적 관리

 

9) 멀티스레드

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

- 멀티스레드 : 한 번에 여러 개의 스레드가 동시에 수행되는 과정

- 멀티스레드 : 하나의 CPU가 여러 개의 프로그램을 동시에 수행하도록 함

- 즉, 수행 속도를 빠르게 하는 장점을 가지고 있음

 

10) 동적

- 기존의 프로그램에 영향을 주지 않고, 라이브러리에 새로운 메서드나 속성들을 추가할 수 있음

- 라이브러리와의 연결을 실행시간에 수행할 수 있음

 

3. 자바 플랫폼

- 플랫폼 : 프로그램이 실행될 수 있는 하드웨어 및 소프트웨어 환경

- 소프트웨어만으로 구성

- jdk로 설치

- java SE, java EE, JAVA ME

 

4. Java SE

- 가장 기본이 되는 에디션

- 자바 언어 대부분의 패키지 포함

 

5. Java EE

- 협업에서 사용되는 API들이 집약된 에디션

- 웹프로그래밍에서 가장 많이 사용되는 jsp, servlet, jdbc 등의 많은 기술 포함

 

6. java ME

- 모바일 기기 등에서 사용되는 api가 포함된 에디션

- 스마트폰의 자체적인 OS로 인해 자체 API의 사용(안드로이드 SDK 등)

 

7. 자바의 패키지

1) java.applet

- 애플릿 작성에 필요한 기능을 모아 놓은 패키지

 

2) java.awt

- GUI 작성과 관련된 패키지

- javax.swing 패키지와 함께 자바 GUI 애플리케이션 작성 시 필수적으로 사용

- 버튼, 텍스트필드 등 이벤트 기능 제공

 

3) java.applet

- 자바 입출력 기능과 관련된 패키지

- 파일이나 버퍼 등의 입출력 기능 제공

 

4) java.lang

- 자바 언어의 기초적인 사항을 정의한 클래스와 관련된 패키지

 

5) java.net

- 자바의 네트워크에 관련된 패키지

- 이 패키지 내에는 소켓과 관련된 기능 제공

 

6) java.swing

- java.awt 패키지와 더불어 자바 GUI 애플리케이션 기능과 관련된 패키지

- java.awt 포함 내용보다 다양하고, 융통성 있는 컴포넌트 제공

 

7) java.util

- 유틸리티성 기능과 관련된 패키지

- 날짜 표현이나 여러 자료형을 하나로 취급하는 컬렉션과 관련된 기능 제공

 

8. 자바 프로그램 구조

- 자바 프로그램은 .java 파일에 하나의 클래스를 정의

- 클래스 내부에 실행에 필요한 변수나 메서드(또는 함수) 등을 정의

- 자바 프로그램에서 클래스는 자바 프로그램의 최소 구성 단위

// public은 자바 예약어로, FirstClass.java 파일의 클래스를 외부에 공개함
public class FirstClass {

}

9. 자바 주석

- //

- /* */

- /** */

 

10. 자바 출력 문장

- java.io : 처리하기 어려운 입출력 작업을 효율적으로 지원하기 위해 java.io 패키지를 제공하여입출력 프로그램을 구현함.

 

11. 자바 관례

- 관례상 클래스 이름은 대문자로, 메서드 이름은 소문자, 변수는 소문자, 상수는 대문자로 시작

 

12. 기본 데이터 타입 종류

- 논리값 : boolean

- 단일문자 : char 16bit의 유니코드 문자데이터

- 정수 : byte, short, int ,long 8/16/32/64

- 실수 : float, double 32 /64

 

13. 묵시적 형변환의 규칙

- byte -> short -> int -> long -> float -> double

- char -> int -> long -> float -> double

 

14. 값1 instanceof 값2

- 값1이 값2 데이터 타입의 객체인 경우 true

 

15. 논리연산자

- && , || 보다 빠르게 연산할 수 있음

 

16. ^

- exclusive or 

 

17. 조건 삼항 연산자

- ? 형태의 삼항 연산자를 제공하여 조건 삼항 연산을 제공함

- 조건 제어문인 if-else 문장을 축약하여 사용할 수 있음

- 변수 = 조건 ? 값 1 : 값2

- 조건이 참이면 값1이 변수에 대입되고, 거짓이면 값2가 변수에 대입됨

int score;
boolean passYn;

score = 80;
passYn = (score > 80) ? true : false;

 

18. 자바의 일차원 배열의 선언과 사용

- int[] score;

- int score[];

int scorelist[] = new int[100];

 

19. 자바의 이차원 배열의 선언과 사용

- int[][] score;

- int score[][];

- scorelist = new int[3][4];

int scorelist = new int[3][];

scorelist[0] = new int[2]; //0 01 
scorelist[1] = new int[3]; //0 012
scorelist[2] = new int[4]; //0 0123

 

20. 배열의 길이

- score.length

 

21. switch문

switch(a){
    case 1:
    case 2:
        break;
}

 

22. 클래스

- 자바 응용 프로그램을 구성하는 가장 기본적인 요소

- 메모리 상의 객체인 인스턴스를 생성하기 위한 템플릿으로 사용

 

23. 인스턴스

- 객체가 컴퓨터 메모리에 올라간 것으로, 메모리 상의 객체를 말함

 

24. 객체

- 현실 세계에 존재하는 유무형의 모든 것을 의미

- 사람들이 의미를 부여하고 분류하는 논리적인 단위

 

25. 상속(Inheritance)

- 기존의 클래스를 이용해서 새로운 클래스를 작성함

- 코드를 간결하게 하여 코드의 재사용성을 높이는 객체지향의 핵심 개념

- 예를 들어, 공통 규칙이 있는데, A,B,C게임에는 공통 규칙이 필요하다. 공통 규칙을 수정해야 하는 경우, A,B,C게임의 규칙을 수정하는게 아닌 공통규칙 하나만 수정하여 A,B,C를 수정할 수 있도록 해준다.

- 자바는 상속을 통해 객체들 사이의 계층 구조를 이룰 수 있음

 

26. 부모 클래스와 자식 클래스

- 부모클래스로 자식클래스에 상속하면 자식클래스는 부모클래스의 변수와 메서드를 모두 물려받음.

 

27. 다형성(Polymorphism)

- 하나의 인터페이스를 이용해 서로 다른 구현을 제공

- 다형성은 메서드 오버로딩(Overloading)과 메서드 오버라이딩(Overriding)을 통해 지원됨

 

28. 오버로딩(Overloading)

- 한 클래스 안에 같은 이름의 메서드를 여러 개 정의하면서, 그 인자의 개수나 유형을 다르게 해 놓은 형태

 

29. 오버라이딩(Overriding)

- 상속 관계에 있는 하위 클래스가 상위 클래스가 가지고 있는 메서드를 재정의하는 것

- 재정의된 메서드가 선언된 형태는 상위 클래스에서 선언된 것과 같음

 

30. 추상화(Abstraction)

- 구체적인 사실들을 일반화시켜 기술하는 것

- 다양한 객체들의 공통된 특성을 모아 일반화해 놓는것

- 클래스를 정의하는데 중요한 역할

- ex) 비행기, 자동차, 열차, 배를 운송수단으로 추상화

 

31. 캡슐화(Encapsulation)

- 변수와 메서드를 하나의 추상화된 클래스로 묶는 과정을 의미

- 변수와 메서드를 하나로 묶어 독립적으로 동작하지 않도록 함

 

32. 정보 은닉(Information Hiding)

- 객체지향 언어에서는 캡슐화된 변수나 메서드를 선택적으로 공개하거나 숨길 수 있음

- public, private 등을 사용하여 정보 은닉 가능

 

33. 메시지(Message)

- 객체들은 메시지를 주고 받으며 서로 통신

- 여러 객체는 동일한 프로세스를 가질 필요 없음

 

34. 객체지향 프로그램에서는 모든 프로그램을 객체 단위로 구현

 

35. 접근 제한자

- 접근 제한 시 사용되는 키워드

- 생략 가능

- 접근 제한자를 생략하면 같은 패키지 내의 클래스에서만 접근 가능함

- 서로 다른 패키지의 클래스에 접근하기 위해서는 public으로 지정해야 함

 

36. 접근 권한 예약어

- public : 모든 클래스에서 접근이 가능한 클래스임을 의미

- protected : protected가 붙은 변수, 메소드는 동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다.

- private : private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능

- default : default 접근제어자가 되어 해당 패키지 내에서만 접근이 가능하다.

- private -> default -> protected -> public 순으로 많은 접근을 허용

 

37. 활용 방법 예약어

- final : 자식 클래스를 가질 수 없는 클래스를 의미

- abstract : 객체 생성이 불가능한 추상클래스를 의미

- static : 클래스 변수, 클래스로부터 만들어진 모든 객체가 공유할 수 있는 변수 의미

- transient :  Serialize하는 과정에 제외하고 싶은 경우 선언하는 키워드

- volatile :  Java 변수를 Main Memory에 저장하겠다라는 것을 명시 멀티쓰레드에서 하나의 쓰레드는 RW를 하고, 다른 쓰레드들이 Read만 할 때 유용

- synchronized : 쓰레드 동기화를 위해 존재 

- native : 자바 외 다른 프로그래밍 언어로 구현 되었음을 의미

 

38. 멤버 변수 선언

- public : 모든 클래스에서 접근이 가능

- protected : 동일 패키지에 속하는 클래스와 하위 클래스 관계의 클래스에 의해 접근 가능

- private : 변수가 선언된 클래스 내에서만 접근 가능

- final : 변수를 상수로 이용하는 경우 사용

- static : 클래스에 소속된 클래스 변수

 

39. Getter 메서드

- private 변수에 저장된 값을 리턴하는 메서드

 

40. Setter 메서드

- private 변수에 값을 저장하는 메서드

 

41. 추상 메서드

- abstract 예약어는 클래스와 메서드를 선언할 때 사용하는 Modifer

- 클래스 선언부에서 abstract 사용시 추상 클래스

- 메서드의 시그니쳐(리턴 타입, 메서드명, 매개변수)만 정의되고 구체적인 행위, 즉 블록부분은 정의되지 않는 메서드를 의미

- 추상 메서드를 선언할 때는 abstract 예약어는 메서드 앞

- 추상 메서드를 포함하고 있는 클래스는 추상 클래스로 선언되어야 함

- 추상 클래스가 추상 메서드를 포함하지 않을 수도 있음.

- 추상 클래스와 상속이 결합되어야 정확하게 추상 클래스를 이해할 수 있음

- 상속은 부모 클래스의 모든 변수와 메서드가 자식 클래스로 상속되어 들어오는 개념 

 

42. 생성자

- 생성자는 클래스로부터 객체를 생성할 때 호출되며, 객체의 멤버 변수를 초기화하는데 사용되는 메서드

- 객체 생성 및 생성된 객체에 필요한 데이터를 초기화하는 과정을 단순화하여 코드의 양을 줄이는 역할 수행

- int[] scoreList = new int[5];

 

43. this

- 생성자나 메서드의 매개변수 이름이 객체 변수의 이름과 같을 때 사용

- 멤버변수와 매개변수 이름을 구분하여 프로그램의 가독성을 높임

 

44. private 변수는 상속되지 않음 private는 속한 클래스에만

 

45. 오버라이딩

- 부모 클래스의 메서드를 재사용하지 않고 새롭게 정의하여 사용하는 것

- 상속 관계에 있는 클래스에서 자식 클래스가 부모 클래스의 메서드를 재정의해서 가지고 있는 개념

- 자식 클래스에서 재정의된 메서드는 부모 클래스의 메서드와 메서드 이름, 매개변수의 유형과 개수가 동일해야 함

 

46. 오버로딩

- 하나의 클래스에 동일한 이름의 메서드가 여러 개 중복 정의되어 있는 것

- 메서드 매개변수의 개수나 타입이 달라야 함

 

47. final

- final + 변수는 상수를 의미

- final + class 는 자식 클래스를 가질 수 없는 클래스를 의미

- final + 메서드 는 오버라이딩을 금지하는 메서드를 의미

 

48. abstract

- 메서드와 클래스를 선언할 때 사용하는 Modifer

- 메서드를 선언할 때 현재 메서드를 추상 메서드로 정의하겠다는 의미

- 추상 클래스를 사용해야 유지보수의 편의성을 높일 수 있음

 

49. 인터페이스

- 상수와 추상 메서드 외에 다른 멤버를 갖지 못하게 함으로써 추상 클래스보다 더욱 완벽한 추상화를 제공

- 멤버 변수는 상수형으로 선언되어야 함(final 사용)

- 메서드는 모두 추상 메서드로 선언되어야 함(static 사용)

- 인터페이스를 통해 다중상속과 유사한 기능 구현 가능

 

50. 패키지

- 자바의 클래스들을 분류하고, 관련된 클래스와 인터페이스를 하나의 폴더에 적절하게 배치할 때 관련된 클래스들이 묶여 있는 폴더

- 다른 기능을 구현한 같은 이름의 클래스를 사용할 때 이름의 충돌을 피할 수 있음

- 관리 용이

- 클래스의 접근 권한을 패키지 단위로 제어할 수 있음

- 자바는 api를 통해 많은 클래스들을 패키지화하여 제공

- import 패키지명

- java.util 패키지에서 다른 클래스를 사용할 경우 import java.util.* 를 사용

- 동일한 이름의 클래스는 여러 개 import 할 수 없음

- 사용 빈도가 높은 클래스는 import, 사용 빈도가 낮은 클래스는 패키지 경로를 포함하여 사용

 

51. 패키지

- package 패키지명;

- import A.B; -> A 패키지의 B클래스를 import

 

52.  java.lang.ArithmeticException / by zero -> 어떤 정수를 0으로 나누려고 할 때 발생되는 예외

 

53. java.lang.RuntimeException

- 실행 시에 발생하는 예외이므로 프로그램이 예외를 다루는 소스코드를 포함하지 않아도 컴파일러가 컴파일을 해줌

- RuntimeException의 자식 클래스가 아닌 예외 클래스는 예외 처리 로직이 없으면 컴파일 되지 않음

 

54. IndexOutOfBounds Exception

- 배열의 인덱스가 배열의 길이를 넘어서면 발생하는 오류

 

55. IllegalArgument Exception

- 메서드의 매개변수 유형을 잘못 사용하면 발생하는 오류

 

56. IOException

- 입출력 시에 지정한 파일이 시스템에 존재하지 않으면 발생하는 오류

 

57. 예외처리

- try-catch 구문

- 다중 catch 블록

- 상속을 이용한 예외 처리

- finally 블록

- throws 예약어 사용

 

58. try{ } catch(){}

- try 블록 : 프로그래머가 프로그램 중에서 예외가 발생할 수 있는 소스코드들을 try 블록 안에 작성

- try 블록은 최소한 하나의 catch블록이 있어야 함

 

59. java.lang 패키지

- 가장 기본이 되는 필수 클래스들과 인터페이스들이 포함된 패키지

- java.lang 패키지의 클래스나 인터페이스들을 import 구문 없이 사용할 수 있도록 함

 

60. java.lang.Object 클래스

- 자바 API의 모든 클래스와 사용자가 정의한 모든 클래스의 최상위 클래스

- 모든 자바 클래스들은 Object 클래스로부터 상속받음

- toString() : 현재 객체의 문자열을 반환함

 

61. 자바 String 클래스

- 인덱스는 0부터 시작

 

62. str.capacity() -> 객체의 용량 확인

 

63. import java.util.Arrays;

- Arrays.sort(A);

 

64. 자바에서 new는 힙으로 생성이 된다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기