클래스, 객체, 인스턴스 개념
1. 클래스 : 객체를 만들어 내기 위한 설계도, 툴. 연관되어 있는 변수와 메서드의 집합
2. 객체 : oop 관점에서 클래스의 타입으로 선언되었을 때 객체라 부름, 모든 인스턴스를
대표하는 포괄적인 이름을 가짐, 클래스에 선언된 모양 그대로 생성된 실체.
3. 인스턴스: 객체가 메모리에 할당되어 실제 사용될 때 ‘인스턴스’라 부름, 구체적인 실체.
1) 자바 특징
➀ 이식성이 높음 (서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행 O)
- 자바 실행 환경 (JRE:Java Runtime Environment)이 설치되어 있는 모든 OS 실행 가능
➁ 객체 지향 언어 : 캡슐화, 상속, 다형성 기능
➂ 함수적 스타일 코딩 지원 : 람다식
➃ 메모리 자동 관리
- 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면
Garbage Collector를 실행시켜 자동적으로 사용하지 않는 객체를 제거시켜줌.
➄ 다양한 애플리케이션 개발 가능, 멀티 스레드 쉽게 구현 (관련 API 제공),
동적 로딩(객체가 필요한 시점에 클래스를 동적 로딩해서 객체 생성),
오픈소스 언어이기 때문에 오픈소스 라이브러리 풍부
+) JDBC : 자바 프로그램 안에서 SQL을 실행하기 위해 데이터베이스를 연결해주는
응용프로그램 인터페이스
2) JVM (자바 가상기계)
- 운영체제와 자바 프로그램을 중계하는 JVM을 둠(자바는 완전한 기계어 X)
- JVM은 OS에 종속적, 맞게 설치해야. JDK나 JRE 설치하면 자동으로 설치됨.
3) 실행과정
.java 소스파일 작성 ->컴파일러(javac.exe)로 바이트 코드 파일(.class) 생성
-> JVM 실행시 중간언어 (클래스파일)을 한줄씩 자바 인터프리터가 번역
* java.exe로 JVM 구동시 제일 먼저 main() 메소드 실행, entry point라 불림.
4) 메모리 사용 영역
- 메소드 영역, 힙 영역, 스택 영역으로 구분해서 사용.
➀ 메소드 영역
: 클래스들을 클래스 로더로 읽어 클래스별로 런타임 상수풀, 필드 데이터, 메소드 데이터,
메소드 코드, 생성자 코드 등을 분류해서 저장.
: JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
➁ 힙 영역
: 객체와 배열이 생성되는 영역, 스택 영역의 변수나 다른 객체의 필드에서 참조함.
: 참조하는 변수, 필드가 없으면 JVM은 Garbage Collector 실행, 자동으로 제거.
➂ JVM 스택 영역
: 각 스레드마다 하나씩 존재, 스레드 시작 시 할당됨.
: 메소드를 호출할때마다 프레임을 추가(push), 종료되면 해당 프레임 제거(pop)
: 프레임 내부에는 로컬 변수 스택이 있음.
* NullPointerException : null값을 가지고 있는 참조 타입 변수 사용 시 발생 에러
* 문자열을 string 변수에 저장한다 (X)
-> 문자열은 string 객체로 생성되고, 변수는 string 객체를 참조한다.
-> 힙 영역 -> 스택 영역
* new : 힙 영역에 새로운 객체를 만들 때 사용, 객체 생성 연산자
- 따라서, new 연산자로 string 객체 생성후 == 연산 결과 false,
- == 연산자는 변수에 저장된 객체 번지가 동일한지를 검사하기 때문.
- 단순 문자열만 비교시 equals() 사용시 같음.
5) 기타
- object class-> 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위해서
- 싱글톤 >전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우,
이 객체를 싱글톤이라 함.
- final 필드 > 한 번 초기화되면 수정할 수 없는 필드
- 패키저 > 클래스를 체계적으로 관리하기 위해
➀ Getter와 Setter
- 일반적으로 OOP에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막음.
=> 무결성이 깨질 수 있기 때문. So 메소드를 통해 데이터를 변경함.
* getter: 필드값을 가공한 후 외부로 전달하는 역할
* setter: 매개값을 검증해서 유효한 값만 데이터로 저장하는 역할
➁ Annotation
- 메타데이터: 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보
- 세 가지 용도로 사용
ㄱ. 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공
ㄴ. 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
ㄷ. 실행시 특정 기능을 실행하도록 정보 제공.
ex)
ㄱ. @Override : 재정의 된 것을 컴파일러에게 알려주어 컴파일러가 오버라이드 검사를 하도록 해줌.
ㄴ. 자동으로 XML 설정파일 생성, 배포를 위해 JAR 압축 파일 생성에도 사용됨.
6) Collection
- collection 객체는 여러 원소들을 담을 수 있는 자료구조
- list형(순서 O 목록), set형(순서 중요 x), queue형, map형(key-value 형태 저장)
=> 동적 메모리 할당. (배열과의 차이점)
'IT > CS' 카테고리의 다른 글
전산직렬 필수 CS- 정렬기법 (선택, 삽입, 버블, 퀵, 힙), 배열 스택 큐 리스트, 트리, 힙, 폭포수, 애자일 등 이론 내용 (0) | 2022.05.29 |
---|---|
개발 CS 지식 기술면접 질문 정리 (3)- 파이썬, 데이터베이스, 비동기 프로그래밍, react native (0) | 2022.05.27 |
웹 프로그래머 단골 기술 면접 질문 (2) (0) | 2022.05.26 |
웹 프로그래머 단골 질문, 기술 면접 모음 (1) - java, oop, Overloading vs Overriding, 프레임 워크 등 (0) | 2022.05.25 |
IT개발/ 서버 직무 기술면접 질문 정리 - rest api, was, JSP, Servlet, MVC패턴, get/post 방식 등 (0) | 2022.05.24 |