츄르사려고 코딩하는 코집사입니다.
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는 힙으로 생성이 된다.
'Language > Java' 카테고리의 다른 글
자바(Java) 중복없는 로또 번호 프로그램 만들기 (0) | 2021.01.20 |
---|---|
[SW expert Academy] SWEA 5215번 햄버거 다이어트 자바(Java) (0) | 2021.01.14 |
자바(Java) Open Associated Perspective? (1) | 2021.01.13 |
위즈랩(WizLab)으로 게임 만들기 (0) | 2021.01.11 |
자바(Java) 프로그램 실행 시간 측정 코드 (0) | 2021.01.10 |
[자바/Java] 접근 지정자 및 패키지 (1) | 2019.04.28 |
[Java/Head First Java] 코드 자석(Code Magnetic) (0) | 2019.04.06 |
자바(JAVA)의 배포판 - Java SE, Java ME, Java EE (0) | 2019.01.17 |
최근댓글