Java concepts
Java concepts
JAVA 개념 정리 (09.04 ~ 09.08)
Java의 특징
객체 지향 언어 (OOP)
- 객체란 무엇인가
- 현실 세계의 Entity를 객체로 지정해 이 객체로 프로그래밍을 하는 기법
- 객체는 필드와 메소드를 통해 노출 됨
- 이러한 방식을 통해 내부 상태는 숨기고 객체간의 상호작용 → 데이터 캡슐화
- 모듈성, 정보 은닉, 코드 재사용, 디버깅 용이성 등의 기능을 제공함
- 클래스란?
- 객체를 생성하기 위한 Blueprint
- 클래스를 기반으로 얼마든지 객체를 찍어낼 수 있음
- 상속이란?
- 자식 객체는 부모 객체의 함수를 사용가능하다
- 클래스는 하나의 슈퍼 클래스를 가지며 무한의 서브 클래스 생성 가능
- 객체 지향의 설계 원칙
- 단일 책임 원칙 : 한 클래스는 하나의 책임
- 개방 폐쇄 원칙 : 확장에는 Open, 수정에는 Close
- 리스코프 치환 원칙 : 하위 타입은 항상 상위 타입을 대체 가능
- 인터페이스 분리 원칙 : 인터페이스의 메소드는 최소한일 수록 좋다.
- 의존관계 역전 원칙 : 변하치 않은 불변 클래스와 관계를 맺을것.
- 패키지 → 기능별로 클래스와 인터페이스를 구성하는 것들을 묶은것
- API → Application Programming Interface
- 자바는 완전한 객체 지향은 아니다… 대신에 아름다운 객체지향
- JDK → 자바 개발 도구 (컴파일 기능 있음)
- JRE → 자바 실행 머신 (컴파일 기능이 없음)
JVM
- Java Byte Code를 OS에 맞게 변환 → OS에 독립적
- 컴파일 하면 바이트코드 생성
- 스택 기반 동작
- 가비지 컬렉션을 통한 메모리 관리
- 동적으로 할당됐던 메모리 영역 중 필요 없는 메모리 영역을 회수해서 관리
메모리 영역
- 메소드 영역 : 전역 변수와 Static을 저장
- 스택 영역 : 지역 변수와 매개변수를 저장, 메소드 호출시 할당 및 종료시 반환, LIFO의 구조를 가짐
- 힙 영역 : new 키워드로 관리 객체, 배열이 저장됨 가비지 컬렉션으로 관리
Synchronized
- 여러개의 Thread가 한개의 자원을 이용할때 나타나는 교착 상태(Deadlock)을 방지
- 하나의 Thread가 접근지 다른 Thread의 접근을 막음
- 남발하면 성능 저하
String
- java.lang.String
- String 생성시 new String()과 리터럴 방식으로 구분
- new String은 Heap 영역에 저장
- 리터럴 방식은 String Constatnt Pool 영역에 저장
- 리터럴은 객체를 생성하지 않고 그대로 저장하는 방법 → 가독성, 최적화 우수
final
- 클래스, 메소드, 변수 등을 한 번만 할당
- 한번 초기화 되면 변경할수 없으며 오버라이딩과 상속을 금지함
Java 자료형 / Collections
정수형
- byte - 1 , short -2 , int - 4, long - 8
실수형
- float - 4, double - 8
문자형
- char - 2
논리형
- boolean - 1
배열
- Scan에 빠름 바이트 수에 맞게 입력
List
- ArrayList → 배열 형식으로 데이터를 저장 스캔에 유리
- LinkedList → 자료 삽입에 유리 순차 접근만 가능하기에 스캔에 불리
TreeSet
- 검색에 메우 최적화
- 일반적인 트리 구조
HashSet
- Tree 구조보다 검색에 빠름
JAVA 개념
자바 접근 제어자
- Public, Protected, default, private
- 객체들간의 관계에 있어 권한을 부여 가능
- 데이터의 부적절한 사용으로부터 보호 가능
다형성
- 같은 자료형에 여러가지 타입의 데이터를 대입하여 다양한 결과를 얻어낼 수 있는 성질
업 캐스팅
- 자식 클래스가 부모 클래스 타입으로 캐스팅
- 해당 클래스는 부모 클래스의 멤버만 접근 가능
- 하나의 인스턴스로 묶어서 관리 가능 → 다운 캐스팅이 필수적
다운 캐스팅
- 부모 클래스가 자식 타입으로 캐스팅 되는것
- 주로 업케스팅한 객체를 되돌리는데 쓰임
추상 클래스
- 추상 메소드가 하나 이상 포함된 클래스
- abstract로 정의된 경우
- 하위 메소드의 기능 확장을 추구
- 다중상속이 불가능
- 하위 클래스에서 추상 메서드의 구현을 강제함
- Overrriding
인터페이스
- 모든 메소드가 추상 메소드로만 이루어져 있음
- 하위 메소드가 구현시 특정 메소드가 반드시 있어야함
- 다중 상속이 가능
- Overrriding
- 서브타이핑이라고도 불림
- 리스코프 치환 원칙(LSP)를 만족함 → 자식이 부모의 행동 호환성을 유지, 부모 클래스를 대체 가능함.
- 추상클래스와 차이 → 다중 상속이 가능하기에 기능에 따른 인터페이스를 상속해 기능 확장 → 인터페이스 분리 원칙(ISP)라고 함
상속
- extends
- 부모의 변수, 메소드 사용가능
- 다중 상속 X
- implements
- 부모 메소드를 반드시 재정의 해야함
- 다중 상속이 가능
Overrriding
- 하위 클래스에서 상위 클래스의 메소드를 재 정의해서 사용
- 코드 중복을 줄이고 기능 확장에 이점
Overloading
- 같은 이름을 가지지만 매개변수가 다른 여러 개의 메소드를 선언
- 메소드 이름의 중복으로 가독성 증가
싱글톤 패턴, Static
싱글톤 패턴
- 인스턴스의 불필요한 생성을 방지하고 오직 한개만 생성
- 메모리 낭비 방지
- 데이터 공유의 용이
Static
- 인스터스가 아닌 클래스에 고정
- 객체 인스턴스 생성하지 않고 사용 가능
- JVM에 Static 영역에 바로 배치
- Static 변수 선언시 클래스 변수라고도 함
차이
- Static은 다형성을 사용할수 없음
- Static은 프로그램 실행시 초기화, 싱글톤은 getInstance 호출 시에 생성
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.