1. Java 란?
- 객체 지향적 프로그래밍 언어 (OOP) 이다
- OOP 란 프로그리맹에 사용될 데이터 상태와 행위를 객체로 만들어, 객체간의 상호작용을 통해
비지니스 로직을 구성하는 프로그래밍 기법
2. Java 의 특징
- JVM 을 이용하기 때문에 운영체제에 독립적
- 객체지향언어이기 때문에 캡슐화, 상속, 다형성, 추상화의 특징을 가짐
- 컴파일시 데이터 타입이 결정되는 정적 타입 언어
- 컴파일 언어와 인터프린터 언어 2가지 동작방식을 복합적으로 사용하는 하이브리드 언어라고 불리기도 함
- GC 를 지원
3. Java 접근 제어자
- 클래스, 인터페이스, 멤버변수, 함수 등의 접근을 제어하는 지시어를 말함
- 접근제어자를 사용함으로써, 외부 객체의 무분별한 접근으로부터 내부 데이터를 보호할 수 있다 (데이터 무결성)
1) public
- 모든 패키지, 모든 클래스의 접근 허용
2) protected
- 같은 패키지, 모든 클래스의 접근 허용 (단, 다른 패키지인 경우 자식 클래스의 접근 허용)
3) default
- 같은 패키지 내 클래스만 접근 허용
4) private
- 같은 클래스 내 접근만 허용
접근 제어자 | 같은 클래스 멤버 | 같은 패키지 멤버 | 자식 클래스 멤버 | 그 외 |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
4. Java 접근 제어자 사용 이유
- 객체지향 프로그래밍간 객체들 간의 상호작용을 코드로 표현
- 객체들간의 관계에 따라서 접근 할 수 있는 것과 아닌것, 권한을 구분할 필요가 있다
- 클래스 내부에 선언된 데이터의 부적절한 사용으로부터 보호하기 위해서 사용
5. Java 의 Final 키워드
- 변수나 메소드 또는 클래스가 변경 불가능 하도록 만드는 자바 키워드
- final 로 선언시 무조건 초기화를 해야하며 초기화 프로그램 실행 도중 값 수정 불가
6. Java 의 Final 키워드 사용 이유
- 클래스, 메서드, 변수가 변하지 않도록 하기 위해
- final 을 선언하면 절대 변하지 않는 값 상수라는 개념을 가지게 됨
- 데이터를 ReadOnly 로 만들어 객체 내부에서 값으 ㅣ변환이나 가공을 하지 않겠다고 선언하여 데이터를
지킬 때 사용됨
7. 인터페이스와 추상클래스의 차이
1) 인터페이스
- 구현체 없이 메서드에 대한 명세만 가지고 있고 모든 메서드 추상 메서드 이다
- 인터페이스를 상속받는 자식클래스에 모든 메서드에 대한 구현을 강제하며, 다중 상속 가능
- 인터페이스 -> implements 키워드 사용, 여러개 가능
2) 추상클래스
- abstract 로 선언되거나 추상메서드를 하나 이상 포함한 클래스
- 클래스이기 때문에 하나만 상속이 가능
- 선언부만 있고 구현부가 없는 메소드이며, 하위 클래스에게 메소드의 구현을 강제하는 메서드
- 추상클래스 -> extends 키워드 사용, 하나만 가능
8. Overriding 과 Overloading
1) Overriding
- 하위 클래스에서 상위 클래스의 메소드를 재정의하여 사용하는 것
- 상위 클래스의 기능을 하위클래스에서 필요한 부분만 재수정하여 우너하는 기능으로 구현
- 오버라이딩의 이점은 코드 중복을 줄이고 기능 확장에 있다
2) Overloading
- 같은 이름을 가지는 메소드를 여러개 가지는 것
- 메소드의 이름은 같지만 매개변수의 개수, 타입 등을 다르게 함으로써, 같은 메소드의 이름을 다른 기능으로
재정의하여 사용 가능
- 메소드 이름 1개로 여러 기능으로 재정의하여 사용할 수 있기 때문에 가독성이 좋아짐
9. Java Generic
1) Java Generic 이란?
- 데이터 타입(data type, 자료형) 을 일반화(generalize) 하는 것으로, 데이터타입을 컴파일 시 미리 지정해 두는 것
- 보통 클래스나 리스트 타입을 미리 지정할 때 사용됨
2) Java Generic 형식과 약어
- <T> == Type
- <E> == Element
- <K> == Key
- <V> == Value
- <N> == Number
- <R> == Result
- 꺽쇠를 사용하여 타입을 명시해 줌으로써 컴파일 시에 객체의 타입을 체크하는 것
- 의도하지 않은 타입의 객체가 저장하는 것을 막고 잘못된 형변환을 막을 수 있기 때문에 안정서이 높아짐
- 동작은 같지만 클래스 타입만 바꿔야 하는 경우를 쉽게 다룰 수 있다
- Java 에서 컬렉션을 사용하면 자주 볼 수 있다
import java.utll.AraayList;
import java.utll.Collection;
import java.utll.List;
public calss Main {
public static void main(String[] args {
List<String> list = new ArrayList();
Collection<String> collection =list;
}
}
- 위의 collection 의 경우 String type 만을 담겠다고 명시됨
만약에 string 타입이 아닌 타입을 넣으면 컴파일 에러가 남
public interface Collection<E> extends Iterble<E> {
int size();
boolena isEmpty();
Iterator<E> iterator();
boolean add(E e);
<T> T[] toArray(T[] a);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
}
3) Generic 장점
- 컴파일 시 타입을 명시해주기 때문에 의도하지 않은 형변환을 막을 수 있고 타입만 변경해서 코드를
수정해야 할 경우 쉽게 변경할 수 있다
10. Static
1) static 이란?
- statinc 변수와 static 메소드 즉, 정적 멤버(=클래스 멤버)를 만들 수 있는 키워드
- 정적 필드와 정적 메소드는 인스턴스(객체)가 아닌, 클래스에 고정되어 클래스 로더가 클래스를 로딩해
메모리 영역에 적재할 때, 클래스 별로 관리되어 정적 메모리로 사용할 수 있다
- 객체 멤버는 객체를 생성할 때 힙 영역에 할당됨
2) static 은 언제 사용되나?
- 정적 멤버는 클래스가 메모리에 올라갈 때 자동적으로 생성되기 때문에 객체 인스턴스를 따로
생성하지 않아도 호출하여 사용 가능
- static 은 유틸리티 함수를 만드는데 사용하거나 변하지 않는 자주 사용하는 값 설정 정보등을 정적 메모리에
올려 객체 생성 비용을 줄일 수 있다
3) static 장단점?
- 장점 : static 은 유틸리티 함수를 만드는데 사용하거나 변하지 않는 자주 사용하는 값 설정 정보등을
정적 메모리에 올려 객체 생성 비용을 줄일 수 있다
- 단점 : 메모리에 올라가는 것이기 깨문에 남용하여 메모리를 낭비할 수 있다
4) Java 의 Main 메서드가 static 인 이유
- 메모리가 초기화 된 순간 객체는 하나도 존재하지 않기 때문에 객체 멤버 메서드는 바로 실행할수 없다
따라서, 객체의 존재 여부에 관게없이 쓰기위해 static 이어야 한다 JVM 구동시 스태틱 영역에 바로 배치되기 때문
'CS 전공지식' 카테고리의 다른 글
24.02.07 Java 관련 3 (1) | 2024.02.08 |
---|---|
24.02.07 Java 관련 2 (1) | 2024.02.07 |
24.02.02 Java 의 Collection Framework 란? (1) | 2024.02.02 |
24.02.01 JDK, JRE 란? (0) | 2024.02.01 |
24.01.31 ORM (2) | 2024.01.31 |