| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- java
- 딕셔너리
- aws saa-c03
- 알고리즘
- 부트스트랩 클래스 로더
- 2026 AWS SAA-C03
- dfs
- 다이렉트 레퍼런스
- 자료구조
- 파이썬 리스트 메서드
- 파이썬 문자열 메서드
- 어플리케이션 클래스 로더
- 스프링 컨테이너
- 컴포넌트 스캔
- 코딩테스트
- 백준
- stop the world
- python
- 자바
- 파이썬
- 심볼릭 레퍼런스
- python list method
- 스프링
- AWS SAA-C03 합격후기
- BFS
- Spring
- 플랫폼 클래스 로더
- getreference
- 클래스 로더 계층
- 객체지향
- Today
- Total
클라우드 낚시꾼
[JAVA 자바] - 클래스와 객체의 필요성 본문
자바는 객체 지향 언어이다. 즉, 자바 프로그램은 객체들의 상호작용이다. 그렇기에 자바에서 클래스와 객체 개념은 정말 중요하다. 이 글에서는 데이터 저장 형태의 발전 과정과 이에 따른 클래스의 필요성을 알아보겠다.
변수에서 배열로의 발전

변수란 하나의 데이터를 저장할 수 있는 공간이고 배열은 같은 타입의 변수 여러 개를 연속적으로 생성하여 한 뭉텅이로 다루는 데이터 저장 형태이다. 배열은 변수의 단점 2가지를 보완하였다.
- 학생 1000명에 대한 정보를 변수로 다룬다면, 변수 1000개를 여러 줄의 코드로 생성해야 한다. -> 배열은 변수 1000개를 코드 1줄로 생성한다.
- 학생 1000명 중 567번째 학생에 접근할 때 개발자가 직접 찾아야 한다. -> 배열은 인덱스를 이용해 특정 변수에 쉽게 접근 가능하다.
배열에서 클래스로의 발전

배열은 같은 타입의 변수 여러 개를 연속적으로 생성하여 한 뭉텅이로 다루는 데이터 저장 형태이다. 그렇기 때문에 배열에 해당하지 않는 타입은 그 배열의 구성요소가 될 수 없다. 하지만, 우리가 개발을 하다 보면, 서로 다른 타입의 변수를 묶어서 사용해야 될 때가 있다. 위의 학생 정보를 다루는 예시에서 배열을 사용한다면, 아래와 같은 3개의 배열이 필요하다.
String[] studentNames = {"학생1", "학생2"};
int[] studentAges = {15, 16};
int[] studentGrades = {90, 80};
배열은 서로 다른 타입의 변수를 뭉텅이로 다룰 수 없기 때문에 각 타입 별로 배열을 생성하고 인덱스를 이용해 관계를 명시한다. 예를 들자면, 각 타입의 배열에서 인덱스 0번째에 위치한 정보는 학생 1의 정보이다. 여기서 만약 학생이 1000명이 된다면, 세 배열의 크기도 1000으로 확장될 것이다. 이 구조에서 발견되는 문제점은 다음과 같다.
- 가독성이 좋지 않다 -> 인덱스로 각 배열의 관계를 명시하기에 가독성이 매우 안 좋다.
- 데이터 관리가 어렵다 -> 위 세 배열 중 어느 하나의 정보가 사라진다면, 학생들 사이의 관계가 완전히 어긋나게 된다.
이러한 문제점으로 봤을 때, 서로 다른 타입의 변수를 다루기 위해 각각의 타입 별로 배열을 선언하는 것은 좋은 방법이 아니다. 이에 대한 해결책은 간단하다. 서로 다른 타입의 변수들을 묶어서 다룰 수 있는 사용자 정의 타입을 만들면 된다.
클래스: 서로 다른 정보를 하나로 묶는 사용자 정의 타입
public class Student {
String name;
int age;
int grade;
}
Student student1 = new Student();
Student student2 = new Student();
클래스란 객체의 설계도로서 그 객체의 특성과 기능이 정의되어 있다. 그리고 그 클래스를 실체화하여 객체를 만들면, 그 객체로 서로 다른 타입의 변수들을 하나로 묶어 다룰 수 있다.
- 아이폰 설계도 = 클래스
- 아이폰 설계도에 따라 아이폰 생성 = 인스턴스화(실체화)
- 생성된 아이폰 = 객체
클래스 덕분에 개발자는 조금 더 편리하게 서로 다른 타입의 변수를 다룰 수 있게 되었다. 물론, 컴퓨터에게는 서로 다른 타입의 변수를 배열로 다루든, 클래스로 객체를 생성해 다루든 상관없을 것이다. 문제는 인간이다. 인간에게 훨씬 직관적이고 안전한 방식은 클래스로 객체를 생성하는 방식이다.
'Programming Language > JAVA' 카테고리의 다른 글
| [JAVA] 심볼릭 레퍼런스와 다이렉트 레퍼런스 (0) | 2024.11.13 |
|---|---|
| [JAVA] JVM의 클래스 로더 알아보기 (1) | 2024.11.12 |
| [JAVA 자바] 변수의 종류와 초기화 + Null (0) | 2023.12.31 |
| [JAVA 자바] 기본형과 참조형 + Call by Value (1) | 2023.12.29 |
| [JAVA 자바] 클래스와 객체 생성 + 내부 동작 알아보기 (0) | 2023.12.29 |