1. 기계어
- CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어, 컴퓨터(CPU)가 별다른 해석(컴파일) 없이 읽을 수 있는 프로그래밍 언어
- 기종마다 기계어가 다르므로 언어의 호환성이 없음
2. 저급 언어 / 고급 언어
1) 저급 언어:
- 기계가 이해하기 쉽게 작성된 프로그래밍 언어 (기계 중심의 언어로, 실행 속도가 빠름) ex. 기계어, 어셈블리어
- 어셈블리어: 기계어를 사람이 이해하기 쉽게 1:1로 대응시켜 기호화한 프로그램 언어, 기계어로 번역하기 위해서는 어셈블러가 필요
2) 고급 언어
- 사람이 이해하기 쉽게 작성된 프로그래밍 언어, 실행을 위해 번역하는 과정이 필요하므로 실행속도가 상대적으로 느림 ex. C언어, 자바
3. 컴파일
소스코드(.java) - > 바이트 코드(.class) = 컴파일
바이트 코드(.class) -> 실행 결과 = JVM
4. 자바의 특징
1) 객체지향 프로그래밍(OOP, Object-Oriented Programming)
- 프로그래밍에서 필요한 데이터를 추상화 시켜 상태(멤버 변수)와 행위(메서드)를 가진 객체를 만들고, 이 객체들 간의 유기적인 상호작용들을 통해 로직을 구성하는 프로그래밍 방법
- 속성과 행동방식을 가진 객체들이 있고, 객체까리 서로 상호작용하며 실행되도록 소프트웨어를 만드는 방법
* 객체: 상태와 행동방식을 가진 현실 세계의 모든 것, 모든 객체는 속성과 행동방식으로 표현될 수 있음
2) 객체지향 언어의 기본 구성 요소 (객체, 클래스, 메시지)
(1) 객체
- 데이터 / 메서드로 구성
- 데이터(Data) : 객체가 가지고 있는 정보로서, 속성이라고도 함
- 메서드(Method) : 객체가 메시지를 받아 실행해야 할 구체적인 연산을 정의
(2) 클래스
- 코드 작성의 기본 단위이며 객체들을 찍어낼 수 있는 설계도/템플릿 역할
(3) 메시지
- 객체들간의 상호작용을 위한 수단으로 사용되며, 메시지를 받은 객체는 메소드를 수행
3) OOP 장점
(1) 코드 재사용이 용이
- 남이 만든 클래스를 가져와서 이용할 수 있고, 상속을 통해 확장해서 사용할 수 있음
(2) 유지보수가 쉬움
- 절차 지향 프로그래밍에서는 코드를 수정해야 할 때 일일이 찾아 수정해야 하는 반면, 객체지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부의 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 됨
(3) 대형 프로젝트에 적합
- 클래스 단위로 모듈화 시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담이 쉬움
4) OOP 단점
(1) 처리 속도가 상대적으로 느림
(2) 객체가 많으면 용량이 커질 수 있음
(3) 설계시 많은 노력과 시간이 필요
5) 객체지향 프로그래밍 키워드 5가지
클래스 + 인스턴스(객체), 추상화, 캡슐화, 상속, 다형성
6. class(클래스)와 instance(인스턴스, 객체)와 차이
1) class(클래스)
- 객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도
- 어떤 문제를 해결하기 위해 현실 세계의 데이를 속성과 행위를 추상화를 통해 변수와 메서드를 정의한 것 = 객체를 만들기 위한 메타 정보
- 클래스는 객체를 만들기 위한 틀(template), 또는 설계도(blueprint)이며 객체를 만들어내기 위한 속성(변수)와 행동방식(메서드)를 포함하고 있음
- class는 참조형 데이터 타입
2) instance(객체)
- 클래스를 통해 생성된 객체 하나하나를 인스턴스라고 부름
- 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체 = 소프트웨어에 실체화 (실체화된 인스턴스는 메모리에 할당됨)
- 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터
- 인스턴스는 클래스를 통해 구체적인 데이터를 전달받아 생성이라는 작업을 통해 메모리에 적재된 결과물
7. 은닉(캡슐화, Encapsulation)
- 클래스 내부 구현을 숨기고 사용자에게는 인터페이스만을 제공해주는 것
- 데이터를 신뢰성 있게 관리하고 오류를 최소화할 수 있게 됨
- 코드를 재수정 없이 재활용 가능, 접근 제어자를 통한 정보 은닉이 목표
- 객체지향 프로그래밍에서는 캡슐화를 통해 객체가 외부에 노출하지 않아야 할 정보 또는 기능을 접근제어자를 통해 제어 권한이 있는 객체에서만 접근하도록 할 수 있기에, 코드의 수정이 일어났을 때 책임이 있는 객체만 수정하면 되기에 오류의 영향 범위를 예측하는게 수월
- 또한 관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 객체 재활용이 원활해짐 (객체가 맡은 역할을 수행하기 위한 하나의 목적을 하나의 클래스(캡슐)에 묶음)
8. 상속(Inheritance)
- 클래스가 다른 클래스의 속성과 행동방식을 물려받아 구현하는 것
- 부모 클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것
- 상속을 받아 새로 만들어지는 클래스는 자식 클래스(sub class)가 되고 멤버들을 상속해주는 클래스를 부모 클래스(super class)라고 함
* 다중 상속은 불가능 (클래스와 상속 관계에서 혼란을 줄 수 있기에, 상속은 하나만 가능하고 필요에 따라 인터페이스를 사용할 수 있게 함)
9. 다형성(Polymorphism)
- 다형성이란 많은 형태를 가지고 있다라는 뜻
- 상속 관계에서 같은 기능이 여러 형태로 존재하는 것을 의미 (하나의 변수명, 하나의 함수명이 상황에 따라 다른 의미로 해석될 수 있다는 것)
1) 메서드 오버라이딩(method overriding)
- 상속 method 내용 변경: 메소드 이름 동일, 매개변수 개수와 타입 동일, 리턴 타입 동일
2) 메서드 오버로딩(method overloading)
- new method(새로운 함수) 기능: 메소드 이름 동일, 매개변수 타입 및 개수 다름, 리턴 타입 상관 없음 (=매개변수에 따라 다르게 호출할 수 있게 함)
- 다형적 변수
10. 추상 클래스(Abstract Class) = abstract class / extends ...
- 일반적인 클래스는 구체적으로 데이터를 담아 인스턴스화하여 직접 다루는 클래스
- 추상 클래슨느 구체적이지 않은 추상적인 데이터를 담고 있는 클래스
- 다중 상속 불가능
- 클래스 내에 일부 메서드가 구현되지 않고 선언만부만 가진 형태의 메서드를 포함한 클래스로 단순히 상속을 위한 클래스
(= new 키워드를 이용하여 객체 생성 불가)
- 구현되지 않은 메서드를 추상 메서드라고 부름
- 추상 클래스를 상속받은 클래스는 반드시 추상 클래스의 모든 추상 메서드를 오버라이딩 해야 함
- 추상 메서드가 없어도 추상 클래스로 선언할 수 있음
- 사용 시기: 같은 조상 클래스를 상속하는 데, 기능까지 완벽히 똑같은 것이 필요 (IS- A)
11. 인터페이스(Interface) = interface / implements ..
- 자식 클래스가 여러 부모 클래스를 상속 받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 될 것인데, 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어서 자바에서는 클래스를 통한 다중 상속을 지원하지 않음
- 하지만 다중 상속의 이점을 버릴 수 없기에 자바에서는 인터페이스라는 것을 통해 다중 상속을 지원
1) 인터페이스
- 참조형 데이터 타입의 일종으로 추상 메서드와 상수만이 정의된 클래스의 변형이라고 할 수 있음
- new 키워드를 이용해서 객체를 생성할 수 없음 (클래스와의 차이점)
- 다른 클래스에 의해 구현(implements)된 다음 모든 추상 메서드의 몸체를 정의해주어야 함
- 인터페이스는 다중 상속 구현이 가능하며, 인터페이스 간에는 상속도 할 수 있음 (부모에게 다중 상속을 받을 수 있음)
- 사용시기 : 다른 조상 클래스를 상속하는 데 같은 기능이 필요한 경우 (HAS- A)
12. 자바 API
- API는 라이브러리로 프로그램에서 자주 사용되는 클래스 및 인터페이스의 모음
- 프로그래밍 언어가 제공하는 기능을 개발자가 프로그램 내에서 쉽게 제어할 수 있게 만든 클래스들의 묶음 (Application Programming Interface) = 설명서(기능별, 함수별 어떻게 처리하는 지 이런거 알려주는) 같은 것(인터페이스)
- 패키지 단위로 묶여 있으며, API Document를 통해 사용법을 제공
1) java.lang 패키지
- java.lang 패키지에 있는 클래스와 인터페이스는 import 없이 사용 가능
- Object 클래스, System 클래스, String 클래스, StringBuffer / StringBuilder 클래스, Math 클래스, Wrapper (래퍼) 클래스
java.lang 참조 ▼
2023.03.20 - [기술면접] JAVA 기본 클래스
[기술면접] JAVA 기본 클래스
[1] 클래스 - 객체 지향 언어에서는 현실 세계를 반영하기 위해 객체(Object)라는 개념을 도입 - 현실 세계의 자동차, TV, 노트북 등이 객체 지향 언어에서는 객체로 표현됨 Class Car { String a = "a"; int b
yuna-story.tistory.com
2) java.util 패키지
- 자바 프로그램 개발의 조미료 같은 역할을 하는 클래스들을 담고 있는 패키지
- 컬렉션 클래스들이 대부분
(1) Arrays : 배열을 조작 (비교, 복사, 정렬, 검사) 할 때 사용
(2) Calendar : 운영체제의 날짜와 시간 정보를 얻을 때 사용
(3) Date : 날짜와 시간 정보를 저장하는 클래스
(4) Objects : 객체 비교, 널(Null) 여부 등을 조사할 때 사용
(5) StringTokenizer : 특정 문자로 구분된 문자열을 뽑아낼 때 사용
(6) Random : 난수를 얻을 때 사용
13. String과 String buffer의 차이
1) String 클래스
- 불변 변수 값 저장, 문자열과 관련된 메서드를 제공하며, 객체 값을 변경할 수 없는 immutable 객체
- 즉, String 클래스의 메서드를 사용하여 문자열을 변경할 경우 원본이 되는 문자열은 변경되지 않음
2) Stringbuffer클래스
- 가변 변수의 값 저장, 문자열을 다루는 클래스이며, 객체 값을 변경할 수 있는 mutable 객체
- 즉, 문자열의 변경이 빈번하게 일어날 때 사용하면 좋음(Thread Safe 객체: 멀티 스레드 사용 시 데이터 무결성 유지)
3) StringBuilder
- 객체 값 변경의 문자열 핸들링 객체
- Thread Unsafe (멀티 스레드 사용지 직접 동기화 해야 함)
성능 차원 : StringBulider > StringBuffer
멀티스레드에 의한 데이터 동기화를 지원하지 않는 반면 성능은 좋음)
'이론 공부' 카테고리의 다른 글
자바 이론 정리 2 (0) | 2023.03.21 |
---|---|
Getter / Setter 사용 이유 (0) | 2023.03.21 |
JAVA 기본 클래스 (0) | 2023.03.20 |
아키텍처(Architecture) (0) | 2023.03.20 |
개발 방법론 (0) | 2023.03.14 |