클래스
객체를 정의하는 틀. 설계도.
자바에서 클래스란 객체를 정의하는 틀, 설계도와 같은 의미로 사용된다.
이 틀을 가지고, 객체를 생성하여 사용한다.
클래스는 객체의 상태를 나타내는 필드, 객체의 행동을 나타내는 메소드로 구성된다.
필드는 객체에 포함되어 있는 변수를, 메소드는 함수와 같이 특정 작업을 수행하기 위해서 사용하는 집합체라고 할 수 있다
참 어려웠다.
대학교때 이걸 처음봤을때가 생각난다. 클래스? 객체? 그게 그거 아닌가...
특히 처음 접해보는 분들이 이 설명을 듣고 바로 이해를 할 수 있을까?
강의에서는 이를 위해서 클래스가 필요한 이유를 설명해준다.
클래스가 필요한 이유
먼저 다음 예시를 보자
아주 간단하게 학생의 정보를 입력하고 이를 출력하는 내용이다.
String 변수 1개, int 변수 2개를 사용해서 학생의 정보를 저장하고 있다.
학생마다 다른 변수를 사용해야하기 때문에, 학생이 늘어날때마다 계속해서 서로 다른 3개의 변수를 추가해주어야 한다.
이를 개선해보기 위해서 배열을 사용해본다.
배열을 사용해서 만들어주면, 학생이 추가되더라도 배열을 늘려 값만 넣어주면 된다.
이렇게 하면 코드 변경을 최소화 시켜줄 수 있다.
하지만 개발자가 실수로 이 순서를 다르게 가져온다면? 학생의 정보를 잘못 불러오는 문제를 일으킬 수 있다.
컴퓨터가 볼때는 문제없는 코드이지만, 사람이 관리하기에 좋은 코드라고 볼 수 없다.
클래스를 도입해 문제를 해결해 준다.
클래스를 사용하여 학생의 정보를 하나로 묶어주었다.
클래스를 사용하기 위해서는 new 연산자를 이용하여 객체를 생성해 주어야한다.
다음과 같이 객체 student1, student2를 생성하여 정보를 입력하고 출력해줄 수 있다.
클래스를 사용하면, 이와같이 하나의 그룹으로 묶어서 관리할 수 있는 장점이 있다.
객체의 생성과 사용
클래스라는 틀을 만들어놓고, 실제로 사용하기 위해서는 new 연산자를 통해서 생성해주어야한다.
new 연산자를 사용하면 메모리에 실제 'Student' 객체(인스턴스)를 생성한다.
객체가 생성되면 참조값이 반환된다. 이 참조값을 가지고 접근할 수 있다!
여기 접근하기 위해 이 참조값을 기억해두어야한다. student 변수를 통해서 접근하고 사용할 수 있다.
다음과 같이 객체를 생성하면, x001이라는 주소값에 객체가 생성된다고 볼 수 있다.
이 x001에 접근해서 student1의 name, age, grade에도 접근할 수 있다.
클래스와 객체, 인스턴스
클래스와 객체, 인스턴스 이놈들이 가장 헷갈리는 부분이다.
쉽게 접근해보자.
클래스
클래스는 객체를 생성하기 위한 '틀' 혹은 '설계도' 라고 생각할 수 있다.
클래스에는 객체가 가져야 할 속성(변수)과 기능(메서드)를 정의한다.
객체
객체는 클래스에서 정의했던 속성과 기능을 가지고 있는 실체이다.
실체라는 말이 가장 혼란스럽긴했지만, 실제 코드에서 사용되는 부분이라고 생각하는게 가장 좋았다.
Student라는 클래스를 만들어놓고, 이를 코드에서 활용하기 위해서 student1, student2 라는 객체를 생성한다.
클래스는 붕어빵틀, 객체는 붕어빵이라고 보면 편하다.
클래스를 만들어놓고, 이를 사용할때 객체로 생성한다!
인스턴스
클래스에서 또 한번 혼돈을 주는 녀석, 바로 인스턴스이다.
인스턴스란 특정 클래스로부터 생성된 객체를 의미한다. 그래서 객체와 자주 혼용되는 용어이다.
강의에서 설명해주신 부분에 의하면, 인스턴스는 조금 더 관계에 초점을 맞춘 단어이다.
관계에 초점을 맞추다? 이것 또한 헷갈림을 부르지만, 쉽게 이해해보면
student1은 객체이다. student1은 Student(클래스)의 인스턴스(관계) 라고 생각하는게 좋다.
실제로 크게 구분하지 않고 사용하니 큰 걱정없이 '관계'에 대해서 이야기할땐 인스턴스라는 용어를 사용하는게 좋겠다.
생성자
객체의 생성과 동시에 변수를 원하는 값으로 초기화할 수 있는 특별한 기능의 메소드
객체를 생성하면서, 동시에 객체에 값을 넣으려면 생성자를 이용하면 된다.
생성자가 필요한 이유
생성자 또한 처음에 이해하기 어려운 내용이었다.
사실 어렵다기 보다는, 그런데 이걸 왜 써야하는거지? 라는 물음에 답하기 어려웠다.
이것도 쉽게 한번 생각해보자.
물론, 어릴적 나의 생각대로 그냥 객체 생성해서 값을 넣어주면 되잖아요? 라고 물어본다면,
그렇게 해도 된다. 어떻게 해도 코드는 돌아가고, 실행되기 때문이다.
여기서 영한님은 명대사를 하나 남겨주셨다.
좋은 프로그램은 무한한 자유도가 주어지는 프로그램이 아니라,
적절한 제약을 제공하는 프로그램이다.
객체를 생성하면, 변수에 초기값을 설정해 주어야 한다.
생성자 사용하면, 객체를 생성하는 시점에 어떤 작업을 해줄 수 있다.
보통 가장 많이 사용하는게 바로 값을 초기화 해주는 것 이다.
한 프로그램에서 회원 객체를 사용하는데, 회원번호가 무조건 존재해야 한다고 가정해보자.
객체를 생성하고, 회원번호 변수에 값을 셋팅해주면 되지만 개발자가 실수로 값을 넣어주지 않을 가능성이 있을 수 있다.
이때, 생성자를 통해서 회원번호를 셋팅해준다면, 회원객체 생성시 회원번호를 무조건 넣어주어야 한다.
( 넣지 않으면, 컴파일 에러가 발생해서 프로그램이 실행되지 않는다. )
생성자를 통해서 필수적인 값들을 먼저 받고,
이후에 나머지 값들을 받는식으로 프로그램을 구성해주면 좋다.
'Java > 김영한의 실전자바' 카테고리의 다른 글
스레드 제어 (0) | 2024.08.22 |
---|---|
스레드의 생성과 실행 (0) | 2024.08.15 |
프로세스와 스레드 (0) | 2024.08.13 |
[김영한의 실전 자바 - 기본편] 기본형과 참조형 (0) | 2024.01.21 |
[김영한의 실전 자바 - 기본편] 수강 후기 (1) | 2024.01.10 |