일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Tree
- 코딩테스트
- 자바
- bit manipulation
- Data Structure
- two pointers
- simulation
- java
- SQL
- 코테
- implement
- string
- 구현
- Counting
- Binary Tree
- Binary Search
- hash table
- array
- Matrix
- sorting
- Method
- greedy
- Stack
- geometry
- Class
- database
- Math
- Number Theory
- dynamic programming
- 파이썬
- Today
- Total
코린이의 소소한 공부노트
클래스의 정의 본문
데이터를 다룰 때 우리는 다음과 같은 것들을 이용한다.
1. 변수
- 하나의 데이터를 저장할 수 있는 공간
- 타입에 따라 공간의 크기가 다름
- 자세한 설명은 2021.12.06 - [Java] - 변수의 데이터 타입(data type)
2. 배열
- 같은 종류의 여러 데이터(변수)를 하나로 저장할 수 있는 공간
- 배열의 크기를 정하면 (배열의 크기) * (타입에 따른 변수의 크기)만큼 공간이 할당됨
- 자세한 설명은 2022.01.14 - [Java] - 배열 (1) 선언과 생성, 인덱스
3. 구조체
- 서로 관련된 여러 데이터를 하나로 저장할 수 있는 공간
- 배열과는 다르게 종류에 상관없이 한 구조체에 담을 수 있음
- 자바에서는 이를 딱히 지칭하는 말은 없음
4. 클래스
- 서로 관련된 데이터와 함수(메서드)의 결합
- 구조체에 함수가 결합된 개념으로 이해
- 객체를 만드는 설계도 역할
- 사용자 정의 타입 -> 사용자가 원하는 데이터와 함수를 정의해서 쓸 수 있기 때문
- 관련된 내용들을 묶어서 다룰 수 있기 때문에 코드의 길이도 줄이고 재사용성도 높일 수 있음
클래스를 사용하는 이유는 아주 간단하다. 객체지향 언어는 비객체지향적 언어의 한계인 코드의 반복 사용, 그에 따른 중량화 등의 단점을 보완하기 위해 객체라는 것을 도입했고, 이 객체를 생성하기 위해서는 클래스가 필요하기 때문이다. 이와 관련된 설명은 2022.02.20 - [Java] - 클래스, 객체, 인스턴스에 있다.
사람의 생일을 저장하려 한다. 생일은 태어난 연도, 월, 일이 있으니 이를 코드로 표현해보자.
1. 비객제지향적 코딩
int year;
int month;
int day;
써놓고 보니, 가족들의 생일도 저장해 보고 싶다. 3명을 추가로 저장하려면 이렇게 해야 한다.
int year1, year2, year3;
int month1, month2, month3;
int day1, day2, day3;
여러 개가 선언되어있는걸 보니.. 이건 좀 아닌 듯싶다. 배열을 이용하면 괜찮아질까?
int[] year = new int[4];
int[] month = new int[4];
int[] day = new int[4];
한결 나아진 느낌은 있으나, 연도끼리 월끼리 일끼리 모여있는 것은 생년월일을 나타내는 데 큰 의미가 없을 듯하다. 인덱스 0번부터 차례대로 아빠, 엄마, 나, 동생이라고 해도 사용하는 데 무지 불편할 것 같다. 나는 연월일이 붙어있는 것을 원한다!! 그래서 마지막으로 연월일을 붙여보기로 했다.
int[] birOfDad = new int[3];
int[] birOfMom = new int[3];
int[] birOfMine = new int[3];
int[] birOfSis = new int[3];
뇌절흠.. 연은 year, 월은 month, 일은 day로 표현하고 싶었는데, 위 코드처럼 해버리면 애초에 연, 월, 일을 나눠서 관리하는 의미가 사라져 버렸다. 이렇듯 비객체지향적인 코딩은 연관성 있는 데이터를 묶어서 표현하기 참 애매하다.
2. 객체지향적 코딩
우선, 생일 정보를 저장할 수 있는 클래스를 하나 만든다.
class Birthday{
int year;
int month;
int day;
}
한 사람의 정보를 저장하는 객체를 하나 만들어볼까?
Birthday bir = new Birthday();
성공적이다. 3명 정보도 추가로 저장할 객체를 만들어보자.
Birthday bir1 = new Birthday();
Birthday bir2 = new Birthday();
Birthday bir3 = new Birthday();
4명의 정보를 배열로 묶어서 관리하려면 어떻게 해야 할까?
// 1) 한꺼번에 하기
Birthday[] b = { new Birthday(), new Birthday(), new Birthday(), new Birthday() };
// 2) 나눠서 하기
Birthday[] b = new Birthday[4];
b[0] = new Birthday();
b[1] = new Birthday();
b[2] = new Birthday();
b[3] = new Birthday();
생성도 다 했으니, 비객체지향 코딩과 객체지향 코딩에서 만든 데이터에 펭수의 생일을 저장해보겠다.
// 1) 비객체지향
year = 2019;
month = 8;
day = 8;
// 2) 객체지향
bir.year = 2019;
bir.month = 8;
bir.day = 8;
값을 넣는데 객체지향이 참조변수 이름도 써야 하고 더 귀찮게 느껴질 수 있다. 하지만 여러 생일 정보를 다룬다면 위에서 코드를 확인했듯이 객체지향쪽이 훨씬 더 편하다. 자바로 코딩을 하면서 연관성이 있는 정보를 묶어서 다뤄야 한다면 클래스로 정의해서 코딩을 쉽고 편하게 해 보자.
'Java' 카테고리의 다른 글
메서드의 생성(선언)과 사용(호출) (0) | 2022.03.04 |
---|---|
선언 위치에 따른 변수의 종류 (0) | 2022.03.03 |
객체 배열 (0) | 2022.03.01 |
클래스, 객체, 인스턴스 (0) | 2022.02.20 |
객체지향 언어의 도입 배경과 특징 (0) | 2022.02.20 |