2018년 7월 28일 토요일

자바 핵심 개념 정리

[기본 개념]
- 언어 수준 : 기계어 > 어셈블리어(기호화 코드) > 고급 언어(C++, Java 등) > 4세대 언어
- 자바 번역 및 실행 과정 : 자바 원시 코드 -> 자바 컴파일러 -> 자바 바이트코드 -> 자바 인터프리터 -> 자바 프로그램 실행 (아키텍처 중립적인 구조)
- JVM : 자바가상머신, 컴파일된 자바 바이트코드 실행, OS 의존적 /  JRE : 자바 실행 환경, JVM과 JVM이 실행할 때 필요한 라이브러리 포함 / JDK : JRE와 개발을 위한 도구(javac, java) 포함

[OOP 개념]
- 객체 : 프로그램 기본 요소, 문제 영역에서 상태와 동작을 가진 기본 단위
- 클래스 : 객체를 정의하는 프로그래밍 단위
- 원시 데이터(primitive) : 수와 문자와 같은 기본적인 값
- 속성 : 원시 데이터나 객체를 표현
- 캡슐화 : 객체가 자신의 정보를 보호하고, 관리하는 개념(은닉화)
- 상속 : 부모 클래스와 자식 클래스의 관계, 소프트웨어 재사용 가능
- 다형성 : 연관된 객체들의 여러 타입을 상이한 시점에 걸쳐 일관된 방식으로 지칭함(인터페이스, 추상 클래스)

[데이터와 식]
- 문자 스트링 : "" / 탈출 시퀀스 : \n, \t 등
- 상수 : final 예약어
- 정수 및 부동 소수 리터럴 : byte(8bit), short(16bit), int(32bit), long(64bit), float(32bit), double(64bit)
- 문자 리터럴 : 단일 인용 부호, 스트링 리터털 : 이중 인용 부호
- 부울 리터럴
- 스캐너 클래스
  + Scanner scan = new Scanner (System.in);
  + 표준 자바 클래스 라이브러리
  + 표준 입력 스트림

[클래스와 객체]
- 클래스 라이브러리 : 프로그램 개발을 지원하는 클래스들의 집합, 패키지로 그룹화 되어있음. 이를 응용 프로그래밍 인터페이스라고 부름
  + java.applet : 웹 상에서 전송이 용이한 프로그램을 생성
  + java.awt : 그래픽 사용자 인터페이스 생성
  + java.beans : 응용 프로그램에 쉽게 결합될 수  있는 소프트웨어 컴포넌트 정의
  + java.io : 다양한 입출력 기능을 수행
  + java.lang : 자바의 일반적인 지원, 모든 프로그램에서 자동 import
  + java.math : 고 정밀도 계산 수행
  + java.net : 네트워크에 걸쳐 통신
  + java.rmi : 다중 컴퓨터에서 분산될수 있는 프로그램 생성
  + java.security : 보안의 제약사항을 수행
  + java.sql : 데이터베이스와 상호 작용
  + java.text : 출력을 위해 텍스트를 편집
  + java.util : 일반적인 유틸리티
  + java.swing : AWS 기능을 확장한 구성 요소를 사용해 사용자 인터페이스 생성
  + java.xml.parsers : XML 문서를 수행함
- 열거 타입
  enum Flavor {a, b, c}
  Flavor cone = Flavor.a;
- 포장 클래스
  // 실체화 수행 시 객체는 효과적으로 정수 40을 객체로 나타내며 기초 타입 값이 아닌 객체가 필요한 곳에 사용됨
  Inteer ageObj = new Integer(40);

[소프트웨어 설계]
- OOP 5원칙
  + 단일책임의 원칙 : 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중
  + 개방폐쇄의 원칙 : 확장에는 열려있고, 변경에는 닫혀있어야 함
  + 리스코브 치환의 원칙 : 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다.
  + 인터페이스 분리의 원칙 : 어떤 클래스가 다른 클래스에 종속될 때에는 가능한 최소한의 인터페이스만을 사용해야 함
  + 의존성 역전 원칙 : 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계관계를 끊는 의미의 역전

[자료구조]
- 군집(collection) : 다른 객체들을 위한 저장소 역할을 하는 객체임
- 자바 군집 API : List / Set(중복없음) / Map(키, 밸류)
- 포괄타입(generic type) : 포괄타입으로 선언된 객체는 실체화될 때 선언된 타입으로 실체화됨 / 적절한 타입의 객체들만 그 군집에 추가될 수 있음