일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- node.js
- HTML5
- 리액트
- SQL 연산자
- 관계형데이터베이스
- spring 환경설정
- ubuntu
- 람다식
- 노마드코더
- 타입
- java spring
- REACT
- 자바스프링
- java설치
- SQL
- numpy
- SQL 명령어
- 객체지향프로그래밍
- 플랙스박스기본
- Eclipse
- SQL 문제
- Hooks
- Flexbox Froggy
- 스프링
- 자바 스프링
- 오산대맛집
- 환경설정
- spring
- 이클립스
- Flex Box 기본
- Today
- Total
이것저것
클래스 본문
* 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~~~~() 정적 메서드 필요: 객체가 생성되었는지 판단
'Java > Java 공부' 카테고리의 다른 글
연산자 (0) | 2023.08.30 |
---|---|
변수와 타입 (0) | 2023.08.29 |
Java 언어 기초 (0) | 2023.08.28 |
객체지향 프로그래밍이란 (0) | 2022.02.25 |
자바란 (0) | 2021.03.31 |