1. 객체란 무엇인가?
- 유지보수에 용이
- 중복 코드의 제거
- 코드의 재사용성이 높음
2. 객체지향의 핵심개념
- 캡슐화
- 상속
- 추상화
- 다형성
3. 객체의 구성요소
- 변수와 메서드의 묶음
4. 객체와 인스턴스
- 객체 : 모든 인스턴스를 대표하는 일반적 용어
- 인스턴스 : 특정 클래스로부터 생성된 객체
5. 클래스란 무엇인가?
- 데이터와 함수의 결합
- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
- 구조체 : 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간
- 클래스 : 데이터와 함수의 결합(구조체 + 함수)
- 설계도
- 사용자 정의 타입
- 원하는 타입을 직접 만들 수 있다.
6. 선언위치에 따른 변수의 종류
class Variables
{ // 클래스 영역 (선언문만 가능)
int iv; // 인스턴스 변수
static int cv; // 클래스 변수(static변수, 공유변수)
// 메서드 영역
voic method()
{
int lv = 0; //지역변수
}
}
변수의 종류 | 선언위치 | 생성시기 |
클래스변수 - static변수, 공유변수 (class variable) | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 (instance variable) | 인스턴스가 생성되었을 때 (new Variables()) | |
지역변수 (local variable) | 클래스 영역 이외의 영역 (메서드 생성자, 초기화 블럭 내부) | 변수 선언문이 수행되었을 때 |
7. 클래스 변수와 인스턴수 변수
- 인스턴스 변수(개별 속성)
- 클래스 변수(공통 속성)
8. 메서드
- 작업단위로 문장들을 묶어놓은 것
- 값(입력)을 받아서 처리하고, 결과를 반환(출력)
- 함수는 클래스에 독립적
9. 메서드의 장점
- 코드의 중복을 줄일 수 있다.
- 코드의 관리가 쉽다.
- 코드를 재사용할 수 있다.
- 코드가 간결해서 이해하기 쉬워진다.
10. 메서드의 작성
- 반복적으로 수행되는 여러 문장을 메서드로 작성
- 하나의 메서드는 한 가지 기능만 수행하도록 작성
11. return문
- 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.
- 반환타입이 void가 아닌경우, 반드시 return문 필요
12. 호출 스택(call stack)
- 메서드 수행에 필요한 메모리가 제공되는 공간
- 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
13. 기본형 매개변수
- 변수의 값을 읽기만 할 수 있다.(read only)
14. 참조형 매개변수
- 변수의 값을 읽고 변경할 수 있다.(read & write)
15. 인스턴스 메서드
- 인스턴스 멤버(iv,im)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수 사용가능
16. static 메서드(클래스 메서드)
- 객체생성없이 호출가능
- 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수 사용불가
17. 오버로딩(overloading)
- 한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
18. 오버로딩의 성립 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 영향없다.
19. 생성자(constructor)
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
- 모든 클래스는 반드시 생성자를 가져야 한다.
20. 기본 생성자
- 생성자가 하나도 없을 때만, 컴파일러가 자동 추가
- 매개변수가 없는 생성자
21. 생성자 this()
- 생성자에서 다른 생성자 호출할 때 사용
- 다른 생성자 호출시 첫 줄에서만 사용가능
22. 참조변수 this
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메서드(생성자 포함)에서 사용가능
23. 참조변수 super
- 객체 자신을 가리키는 참조변수 인스턴스 메서드(생성자)내에만 존재
- 조상의 멤버를 자신의 멤버와 구별할 때 사용
24. super() - 조상의 생성자
- 조상의 생성자를 호출할 때 사용
- 조상의 멤버는 조상의 생성자를 호출해서 초기화
- 생성자의 첫 줄에 반드시 생성자를 호출해야 한다.
25. 변수의 초기화
- 지역변수(lv)는 수동 초기화 해야 함
- 멤버변수(iv, cv)는 자동 초기화된다.
26. 멤버변수의 초기화
- 명시적 초기화(간단한 초기화) : =
- 초기화 블럭(복잡한 초기화)
- 인스턴스 초기화 블럭 : {}
- 클래스 초기화 블럭 : static {}
- 생성자(복잡한 초기화)
27. 상속(Inheritance)
- 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것
- 자손은 조상의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외)
- 자손의 멤버 개수는 조상보다 적을 수 없다.
- 자손의 변경은 조상에 영향을 미치지 않는다.
28. 포함(composite)
- 클래스의 멤버로 참조변수를 선언하는 것
29. 단일 상속(Single Inheritance)
- Java는 단일상속만을 허용한다.(C++은 다중상속 허용)
- 비중이 높은 클래스 하나만 상속관계로 나머지는 포함관계로 한다.
30. Object클래스 - 모든 클래스의 조상
- 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.
- 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다.
31. 메서드 오버라이딩(overriding)
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
32. 오버라이딩의 조건
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
33. import문
- 클래스를 사용할 때 패키지이름을 생략할 수 있다.
- import문은 컴파일시에 처리되므로 프로그램의 성능에 영향없음
34. 제어자(modifier)
- 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여
- 접근 제어자
- public, protected, (default), private
- 그 외
- static, final, abstract, native, transient, synchronized, volatile, strictfp
- 하나의 대상에 여러 제어자를 같이 사용가능(접근 제어자는 하나만)
35. static - 클래스에 공통적인
제어자 | 대상 | 의 미 |
static | 멤버변수 | -모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. -클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다. -클래스가 메모리에 로드될 때 생성된다. |
메서드 | -인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다. -static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다. |
36. final - 마지막의, 변경될 수 없는
제어자 | 대상 | 의 미 |
final | 클래스 | 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. |
메서드 | 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다. | |
멤버변수 | 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다. | |
지역변수 |
37. abstract - 추상의, 미완성의
제어자 | 대상 | 의 미 |
abstract | 클래스 | 클래스 내에 추상 메서드가 선언되어 있음을 의미한다. |
메서드 | 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다. |
38. 접근제어자(access modifier)
- private : 같은 클래스 내에서만 접근이 가능하다.
- (default) : 같은 패키지 내에서만 접근이 가능하다.
- protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
- public : 접근 제한이 전혀 없다.
제어자 | 같은 클래스 | 같은 패키지 | 자손클래스 | 전체 |
public | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
39. 캡슐화와 접근 제어자
- 접근 제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해서
- 외부에는 불필요한 내부적으로만 사용되는 부분을 감추기 위해
40. 다형성(polymorphism)
- 여러 가지 형태를 가질 수 있는 능력
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
41. 추상 클래스(abstract class)
- 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
- 다른 클래스 작성에 도움을 주기 위한 것(인스턴스 생성 불가)
- 추상화된 코드는 구체화된 코드보다 유연하다.(변경에 유리)
42. 추상 메서드(abstract method)
- 미완성 메서드, 구현부(몸통, {})가 없는 메서드
43. 인터페이스(interface)
- 추상 메서드의 집합
- 구현된 것이 전혀 없는 설계도(모든 멤버가 public)
44. 인터페이스의 상속
- 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상 아님)
- 다중 상속이 가능(추상메서드는 충돌해도 문제 없음)
- 일부 구현의 경우 클래스 앞에 abstract를 붙여야 한다.
45. 인터페이스를 이용한 다형성
- 인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능
46. 인터페이스의 장점
- 두 대상(객체) 간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.
- 선언(설계)와 구현을 분리시킬 수 있게 한다.
- 개발 시간을 단축할 수 있다.
- 변경에 유리한 유연한 설계가 가능하다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들을 관계를 맺어줄 수 있다.
47. 디폴트 메서드와 static 메서드
- 인터페이스에 디폴트 메서드, static메서드 추가 가능(JDK1.8부터)
- 인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움
- 디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반)
48. 디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책
- 여러 인터페이스의 디폴트 메서드 간의 충돌 시
- 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.
- 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
- 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.
49. 내부클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.(캡슐화)
50. 익명 클래스(anonymous class)
- 이름이 없는 일회용 클래스(정의와 생성을 동시에)
'요약' 카테고리의 다른 글
6. SQL튜닝 요약(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (1) | 2025.03.07 |
---|---|
5. 스프링 DI, AOP 요약 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.25 |
4. 스프링 요약 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.25 |
3. 자바 용어 요약(2) - 패스트캠퍼스 백엔드 부트캠프 3기 (4) | 2025.01.13 |
2. 자바 용어 요약(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.08 |