이것저것

클래스 본문

Java/Java 공부

클래스

곰태태 2023. 9. 2. 18:20
반응형
SMALL

* What is an Object?

 - https://docs.oracle.com/javase/tutorial/java/concepts/index.html

 - https://docs.oracle.com/javase/tutorial/java/concepts/object.html

 - 삼라만상

 - 객체? vs. 개체!

   - 개체: 각각의 물건, 각각의 유무형의 사물/개념

 

* Parameters(매개변수) vs. Arguments(인자, 인잣값, 인수, 전달인자)

 - 잘 정리하세요

 

* 객체 간 관계: 포함 관계

 - 집합 관계(aggregation) vs. 구성 관계(composite)

 

 

* 상속: 부모-자식            -> 상속관계 -> (물려)받는다 (이렇게 이해하지 X)

        상위-하위: Super-Sub -> 분류관계 -> 확장한다/(상태, 행위)추가한다

 

* OOP의 특징

 - 3가지: 캡슐화(데이터 은닉의 목적, 응집도), 상속(=상속 + 추상화), 다형성

 - 4가지: 캡슐화, 상속, 추상화, 다형성

 - https://xangmin.tistory.com/152



* 상속: 상위 vs 하위

 - 상위 클래스로 갈수록: 일반화(general), 추상화(abstract)

 - 하위 클래스로 갈수록: 특정/구체(specific), 구체적(concrete) 

 

* 추상(抽象)

 - 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용

 - OOP: 미완성

 

* 상속의 목적

 - 코드 재사용성 증대

 - 유지 보수 편의성 증대



* 다형성

 - 하나의 참조(규격,스펙)로 여러 객체를 다루는 것

   ← 이게 가능하려면 참조는 최상위 클래스, 객체는 참조의 상속 관계에 있는 클래스의 객체



* 클래스

 - 객체의 설계도

 - 설계도: 객체의 공통 속성과 기능을 기술한 것

 - 클래스 정의: bottom-up(귀납적), top-down(연역적)



* 클래스

 - 클래스 선언과 정의

 - 선언: class 키워드 + 클래스 이름

 - 정의: 클래스 블록에 구성 요소를 선언하고 정의

 - 클래스 블록: 선언문, 대입문만 가능

    ex) 메소드 호출 X

 

* 클래스 선언

 - 소스 파일에 선언된 클래스 개수만큼 바이트코드 파일이 만들어 짐

 - 하나의 소스 파일에 두 개 이상의 public 클래스를 선언할 수 없음

 - 반드시 public 클래스가 있어야 되는 것은 아니다

 - 소스 파일의 이름과 클래스의 이름이 달라도 OK

 - 하지만 public 클래스반드시 소스 파일 이름과 같아야 함

 ⇒ 소스 파일에는 하나의 클래스만 정의하는 것이 일반적

 

* new 연산자

 - 클래스로부터 객체(인스턴스) 생성

 

* 객체 생성

 - 생성자 필요

 

* 생성자(Constructor)

 - 클래스의 이름과 같은 메소드

 - 반환타입은 없음

 

* 모든 클래스는 생성자가 반드시 필요

 - 생성자가 없을 경우 자바 컴파일러가 기본 생성자를 자동으로 만들어 줌

 - 기본 생성자

   : 매개변수가 없는 생성자

 - 매개변수가 있는 생성자를 정의하면 기본 생성자는 만들어지지 않음

 

* 클래스 구성 요소

 - 필드 - 인스턴스 변수

        - 정적 변수(= 클래스 변수)

 - 메서드 - 인스턴스 메서드

          - 정적 메서드(= 클래스 메서드)

 - 생성자

 - 초기화 블록 - 초기화 블록

               - 정적 초기화 블록

 

* 1급 객체(1급 시민, 1st-class citizen, 1st-class object)

 - 변수에 저장

 - 함수의 인자로 사용

 - 함수의 반환값

 

* 필드 초기화 위치

 - 필드 선언 시

 - 생성자에서

 - 초기화 블록에서

 

* Overloading

 - 대상: 메서드, 생성자

 - 같은 이름의 여러 메서드/생성자를 허용

   - 구별: 매개변수의 개수와 타입 그리고 타입의 순서로

           반환 타입과 매개변수 이름은 구별에 사용되지 않음

 

* 메서드/생성자를 식별/구별

 - 메서드/생성자 헤더(시그니처)로 구별

 - 헤더(시그니처): 반환타입 이름(매개변수타입)

   > 메서드/생성자를 식별/구별하는데 있어 매개변수이름은 중요치 않음

   > 오버로딩 시 식별/구별에는 반환타입도 영향이 없음

 

* this vs. this()

 - this: (이) 객체

 - this(): (이 클래스의) 생성자

 

* 멤버 = 필드와 메서드

 

* 인스턴스 멤버

 - 인스턴스(즉 객체)를 통해서만 접근할 수 있는 멤버

 - 객체를 생성한 후에만 사용 가능

 - 객체에 점 연산자를 사용

 

* 정적 멤버(= 클래스 멤버)

 - 인스턴스(객체)를 생성하지 않고서도 접근할 수 있는 멤버

   -> 클래스 이름을 통해서 접근

   -> 클래스 이름에 점 연산자 사용

 - 이유: 클래스가 메모리에 로드될 때 메소드 영역에 생성되기 때문

    <- 클래스는 사용될 때 동적으로 메모리에 로드됨

 - 인스턴스를 통해서도 접근 가능

 

* 정적 변수(정적 필드)

 - 클래스당 한 개 = 해당 클래스의 모든 객체가 공유하는 필드

 - 객체의 공통 데이터(상태)를 저장하는 용도

* 인스턴스 멤버는 정적 멤버에 접근할 수 있음

  정적 멤버는 인스턴스 멤버에 접근할 수 없음

 

* 객체를 통해서 정적 멤버에 접근할 수 있지만 클래스 이름으로 접근하는 것이 좋다



* 변수

 - 메모리 주소에 이름 붙인 것

 - 데이터 저장

 - 데이터 = 타입 + 크기

 - 스코프(변수의 라이프사이클)

 - 스코프는 변수가 생성되는 JVM의 메모리 공간에 의해 결정

   → 변수가 생성되는 공간은 변수가 선언되는 상황(위치)에 따라 결정

     → 인스턴스 변수: 클래스 블록에서, static 키워드 X : [ 영역]

     → 정적 변수: 클래스 블록에서, static 키워드 사용 : [메소드 영역]

     → 지역 변수: 메소드 블록, 생성자 블록, 정적 초기화 블록, 초기화 블록, if/for 등의 블록, 매개 변수 : [스택 영역의 스택 프레임]

 - 필드(인스턴스 변수, 정적 변수), 지역 변수

   → 변수가 생성되는 공간에 따른 분류라고 볼 수 있다

   → 스코프가 다르다

     → 인스턴스 변수: 객체의 라이프사이클

     → 정적 변수: 프로그램의 라이프사이클

     → 지역 변수: 블록의 라이프사이클(변수 선언 시 생성, 블록이 끝날 때 소멸)

 

* 정적 초기화 블록

 - 클래스가 JVM의 메소드 영역에 로드될 때 실행

 - 클래스 로드는 한 번만 이루어지므로 정적 초기화 블록은 단 한 번만 실행

 

* 초기화 블록

 - 객체가 생성될 때 실행 → JVM의 Heap 영역

  → 생성자가 실행되기 전? 후?

 - 객체가 생성될 때마다 실행되므로 정적 초기화 블록과 달리 여러 번 실행 가능

 

* 인스턴스 메소드

 - 자신의 로컬 변수(매개 변수 포함) 접근 가능

 - 인스턴스 변수 접근 가능

 - 정적 변수 접근 가능

 - 인스턴스 메소드 호출 가능

 - 정적 메소드 호출 가능

 

* 정적 메소드

 - 자신의 로컬 변수(매개 변수 포함) 접근 가능

 - 인스턴스 변수 접근 불가

 - 인스턴스 메소드 호출 불가

 - 정적 변수 접근 가능

 - 정적 메소드 호출 가능



* 정적 필드 초기화 순서

 1. 정적 필드 직접 초기화

 2. 정적 초기화 블록

 3. 초기화 블록

 4. 생성자

 

* 인스턴스 필드 초기화 순서

 1. 초기화 블록

 2. 생성자

 

* final 키워드

 - 최종

 - 변수, 클래스, 메서드에 대해서 한정

 

* 변수에 대한 final

 - 필드

  - 인스턴스 변수: 상수(객체 내에서)

  - 정적 변수: 상수(클래스 전체에서)  ⇒ 상수 → 이름: 대문자 뱀체 관례

 - 로컬 변수: 상수(블록 내에서)

 

* 기본 생성자(default constructor)

 - 생성자가 없을 때 컴파일러가 자동 삽입

 - 아무 생성자를 하나라도 만들면 기본 생성자는 만들어지지 않음

 

* (클래스) 상수

 - 모든 객체에서 동일한 값을 사용하게 하고 싶을 때

 - 클래스 외부에서 접근 가능

 

* 접근 제한자(access modifier)

 

* Getter, Setter

 - 메소드

 

* 디자인 패턴

 - 찾아보세요. (개념, 목적, 종류)

 

* Singleton Pattern

 - 생성자의 접근 지정자: private

 - 해당 클래스가 객체를 직접 생성해서 반환

 - 생성한 객체를 저장할 정적 필드 필요

 - 객체를 반환할 get~~~~() 정적 메서드 필요: 객체가 생성되었는지 판단

 

반응형
LIST

'Java > Java 공부' 카테고리의 다른 글

연산자  (0) 2023.08.30
변수와 타입  (0) 2023.08.29
Java 언어 기초  (0) 2023.08.28
객체지향 프로그래밍이란  (0) 2022.02.25
자바란  (0) 2021.03.31
Comments