📝오늘 공부한 것
- 자바의 정석 3판 Chapter 06 객체지향 프로그래밍1
📌 자바의 정석 스터디
월요일부터 자바의 정석 스터디를 진행하기로 했다.
6장부터 시작하여 월, 수, 금 일주일에 3번 한 챕터씩 진행할 것이다.
[ 객체지향언어 ]
- 코드의 재사용성이 높음.
- 유지보수가 용이함.
- 신뢰성이 높은 프로그래밍을 가능하게 함.
[ 클래스와 객체 ]
클래스와 객체의 정의와 용도
클래스의 정의 : 클래스란 객체를 정의해 놓은 것
클래스의 용도 : 클래스는 객체를 생성하는데 사용
객체의 정의 : 실제로 존재하는 것. 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
객체와 인스턴스
객체 : 모든 인스턴스를 대표하는 포괄적인 의미
인스턴스 : 어떤 클래스로부터 만들어진 객체
클래스 —-(인스턴스화)→ 인스턴스(객체)
객체의 구성요소
속성과 기능으로 이루어져 있다.
속성(property) - 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)
기능(function) - 메서드(method), 함수(function), 행위(behavior)
인스턴스의 생성과 사용
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
[ 변수와 메서드 ]
변수의 종류 | 선언 위치 | 생성시기 |
클래스 변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | 인스턴스가 생성되었을 때 | |
지역변수 | 클래스 영역 이외의 영역 | 변수 선언문이 수행되었을 때 |
매개변수의 유효성 검사
메서드의 구현부를 작성할 때, 제일 먼저 해야하는 일이 매개변수의 값이 적절한 것인지를 확인하는 것!
→ 타입만 맞으면 어떤 값도 매개변수를 통해 넘어올 수 있기 때문에, 가능한 모든 경우의 수에 대해 고민하고 그에 대비한 코드를 작성해야함.
JVM의 메모리 구조
- 메서드 영역 (method area) :
클래스 데이터 저장. 그 클래스 변수도 이 영역에 함께 생성 - 힙 (heap) :
인스턴스가 생성되는 공간 - 호출 스택 (call stack / execution stack) :
메서드 작업에 필요한 메모리 공간을 제공
기본형 매개변수와 참조형 매개변수
기본형 매개변수 : read only / 저장된 값을 알수 있음.
참조형 매개변수 : read & write / 저장된 곳의 주소를 알 수 있음.
재귀호출
속도가 느리고, stackoverflow가 발생할 수 있음. 적절히 사용하면 괜찮다고 한다.
하지만, 아직 잘 모르니 사용하는 걸 조심하자!!
클래스 메서드와 인스턴스 메서드
클래스의 멤벼변수 중 모든 인스턴스에 공통된 값을 유지야해하는 것이 있는지 살펴보고, 있으면 static을 붙여준다.
작성한 메서드 중에서 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드에 static을 붙일 것을 고려한다.
[ 오버로딩 ]
한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것
조건 :
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환타입은 상관없음
[ 생성자 ]
인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
조건 :
- 생성자의 이름은 클래스의 이름과 같아야 한다.
- 생성자는 리턴값이 없다.
[ 변수의 초기화 ]
멤버변수와 배열의 초기화는 선택적 / 지역변수의 초기화는 필수적
멤버변수의 초기화 방법
- 명시적 초기화(explixit initialization)
- 변수선언과 동시에 초기화 다른 방법들 중 가장 우선적으로 고려 - 생성자
- 초기화 블럭
- 생성자 보다 인스턴스 초기화 블럭이 먼저 수행됨
멤버변수의 초기화 시기와 순서
클래스 변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한번
인스턴스 변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스별로
클래스 변수 초기화순서 : 기본값 → 명시적 초기화 → 클래스 초기화 블럭
인스턴스 변수 초기화순서 : 기본값 → 명시적 초기화 → 인스턴스 초기화 블럭 → 생성자
개선할 점💪🏻
개념서를 읽으면 아는 내용들도 코드를 작성할 때 적용하기 어려운 것 같다.
앞으로는 코드들 작성할 때 배운 내용들을 적용하면서 해봐야겠다.
그리고 아직 개념을 완전히 이해한 것이 아니라서 정리를 하다보면 나의 말로 적는 것이 아니라 개념서 요약이 되어버린다. 단순히 요점정리가 아닌 나의말로 내가 이해한 것들을 적을 수 있도록 늘려가야겠다.
'TIL(Today I Learned)' 카테고리의 다른 글
TIL-230919('행동대장' 코드리팩토링 - 중복 코드 수정) (0) | 2023.09.19 |
---|---|
TIL-230918('행동대장' 코드리팩토링 - 폴더구조 변경) (0) | 2023.09.18 |
TIL-230915(AWS S3와 EC2) (0) | 2023.09.15 |
TIL-230914(Array와 LinkedList) (0) | 2023.09.14 |
TIL-230913(DB 로직 최소화) (0) | 2023.09.13 |