0. Class & Object
개요
- 객체 이해
- 클래스 개념 및 구성 요소, 문법 이해
- 객체의 두 가지 구성 요소, 속성과 기능 이해
- new 키워드를 통해 객체 생성
- 클래스와 객체의 차이 설명, 둘의 관계
클래스
- 클래스와 객체
- class : 객체를 정의한 설계, 틀
- class는 객체가 아니라 객체 생성을 위한 틀
- 설계도와 제품의 관계
- instance : 클래스를 통해 생성된 객체
- instance화 : 객체를 생성하는 과정
- instance와 object 차이
- 모든 instance를 포괄하는 것이 object
- 해당 class에서 만들어진 객체를 instance
- 기본적으로 같은 의미
- class : 객체를 정의한 설계, 틀
- 클래스의 구성요소와 기본 문법
- 클래스 명은 주로 대문자로 시작
public class ExampleClass { int x = 50; // (1)field void sumOut() {...} // (2)method ExampleClass {...} // (3)constructor class ExampleClass2 {...} // (4)Inner class }
- 필드/메서드/생성자/이너 클래스
- 생성자를 제외한 3가지는 클래스의 맴버
- 필드와 메서드는 속성과 기능을 대표
객체
- 속성과 기능으로 정의하여 실제 사물을 보는 방식으로 설계
- new 키워드를 사용해서 생성 가능
객체의 생성과 활용
- 객체의 생성
- 클래스명 참조 변수명 = new 생성자();
- 참조 변수는 힙 메모리의 주소 값을 의미
- new 키워드를 통해 힙 메모리에 생성된 객체 할당
- Person p = new Person();
- 클래스는 클래스 영역에, 참조 변수는 스택 영역에, 생성자로 만든 객체는 힙에 저장
- 참조 변수는 실제 값이 아니라 주소값을 저장
- 메서드는 클래스에 저장되고, 객체에서는 위치를 가리킨다
- 같은 클래스의 객체는 동일한 메서드 값을 공유하기 때문에 한번 저장하고 각 객체의 힙에서 위치만 가리킨다
- 객체의 활용
- .(포인트 연산자)를 활용
- 참조 변수명.필드 / 참조 변수명.메서드()
1. Field & Method
개요
- 학습 목표
- 객체 필드 및 세 가지 종류 변수 구분
- 변수가 저장되는 위치 설명
- static 키워드
- 메서드 이해, 구성요소와 호출
- 메서드 오버로딩 이해
필드
- Field
- field : class에 포함된 변수
- class variable, instance variable, local variable
- static이 포함되면 CV, 없으면 IV, 그 외 메서드 내 모든 변수 LV
class Example { // => 클래스 영역 int instanceVariable; // 인스턴스 변수 static int classVariable; // 클래스 변수(static 변수, 공유변수) void method() { // => 메서드 영역 int localVariable = 0; // 지역 변수. {}블록 안에서만 유효 } }
- 인스턴스 변수(iv)는 인스턴스 고유의 속성 저장, new 생성자()로 생성, 힙에 저장
- 클래스 변수(cv)는 static 키워드로 선언, 공통된 저장공간을 공유, 인스턴스 생성하지 않아도 이용 가능
- 지역변수(lv)는 스택에 저장되어 메서드 종료 시 소멸
- 힙은 빈 공간을 저장할 수 없어 필드 변수는 강제로 초기화되지만 지역 변수는 스택에 저장하기 때문에 직접 초기화를 해야 한다
Static 키워드
- static은 클래스 멤버(필드, 메서드, 이너 클래스)에 사용
- static 멤버와 인스턴스 멤버로 구분
- static 멤버는 인스턴스 생성 없이도 접근 가능
- 구분하기 위해 일반적으로 클래스명. 멤버명으로 접근
- 인스턴스 변수는 힙에 저장하지만 클래스 변수는 클래스 내부에 저장
- static field는 객체 간 공유 성질을 갖는다
- static method는 instance field나 instance method를 사용할 수 없다 (인스턴스 생성 없이 호출 가능하기 때문)
Method
- 메서드(method)
- 특정 기능을 수행하는 명령문 집합
- method signature : [접근제어자] [static] [반환형] 메서드 이름 (매개변수)
- method body : {내용}
- 메서드 명은 관례적으로 소문자로 표시
- method 호출
- 객체명.method이름()
Method overloading
- 메서드 오버 로딩 : 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의
- 클래스 이름이 같고 매개 변수의 개수나 type이 달라야 한다
- 반환형이 다르다고 오버 로딩되지 않는다
2. 생성자(Constructor)
개요
- 학습 목표
- 생성자의 개념과 문법 이해
- 생성자가 매더스와 구분되는 차이
- 메서드 오버 로딩이 생성자에서 구현되는 방식
- 기본 생성자와 매개변수가 있는 생성자 차이
- this와 this()의 차이
생성자
- 객체를 생성하는 역할을 하는 구성요소
- 인스턴스 초기화를 하는 데 사용하는 특수 메서드
- 사용 조건
- 생성자의 이름은 클래스 이름과 같다
- 리턴 타입이 없다
- 생성자도 오버 로딩이 가능하다
기본 생성자 vs 매개 변수가 있는 생성자
- 기본 생성자(default constructor)
- DefaultConst(){}
- 매개변수, 바디에 아무것도 없다
- 생성자가 없는 경우 기본 생성자를 자동 생성
- 매개변수가 있는 생성자
- 매개변수를 입력받아 인스턴스 초기화
this vs this()
- this()
- 생성자 내에서 사용
- 생성자의 첫 줄에 사용
- this
- instance 자신을 가리킨다
- 인스턴스 변수와 생성자 매개변수를 구분하기 위해 사용
- 인스턴스 변수는 this.OOO라고 작성 가능
3. 내부 클래스(inner class)
개요
- 학습 목표
- 내부 클래스의 기본 개념과 장점
- 선언 위치에 따른 종류
- 종류에 따른 유효 범위와 접근성
내부 클래스
- 내부 클래스
- 클래스 내에 선언된 클래스
- 외부 클래스 멤버와 쉽게 접근 가능하고 캡슐화 용이
맴버 내부 클래스(member inner class)
- 인스턴스 내부 클래스와 정적 내부 클래스를 포함
- 인스턴스 내부 클래스
- 외부 클래스의 인스턴스 변수와 정적 변수 접근 가능
- 내부 클래스에서는 정적 변수/메서드 선언 불가(외부가 선언되어야만 내부 클래스 접근 가능하기 때문)
- 정적 내부 클래스
- 외부 클래스와 무관하게 내부 클래스 정적 변수를 사용하려고 할 때 사용 가능
지역 내부 클래스
- 클래스 멤버가 아닌 메서드 안에서 정의된 클래스
- 일반적으로 선언 후 바로 객체 생성해서 사용
'Backend boot camp > Session1' 카테고리의 다른 글
[JAVA] 컬렉션(Collection) (0) | 2022.09.06 |
---|---|
[JAVA] 객체 지향 프로그래밍 심화 (0) | 2022.09.06 |
[JAVA] 기초 - 배열 (0) | 2022.09.06 |
[JAVA]기초 - 변수, 타입, 문자열, 연산자, 콘솔 입출력 (0) | 2022.09.06 |
[Git] 기초 (0) | 2022.09.06 |