inflearn

[인프런] 김영한의 자바 기본 강의 섹션1. 클래스와 데이터 (240104)

hail2y 2024. 1. 5. 03:30

오늘 전반적인 컨디션이 평소대로 안 올라왔다. 기분이 딱히 나쁜 것도 아니었지만 수업 전에 잡플래닛에 가입도 하고 채용공고도 확인하니 넘어야 할 산이 많다는 게 확 느껴져서 기운이 안 났던 것 같다. 잠은 또 많이 자는 만큼 중간에 따로 자지는 않는 편인데 오늘 강의 듣다가 너무 힘들어서 쪽잠까지 잤다. 그러고 쉬엄쉬엄 하다 와플도 사먹으러 가고 라면도 먹어 둬서 지금은 좀 쌩쌩해 졌다! 다시 강의가 재밌다고 생각되니까ㅎㅎ 그치만 너무 늦게는 자지 말아야지-

 1/4 섹션1. 클래스와 데이터

팁부터 시작!

  • 인텔리제이의 자동완성 기능에 따라 변수명을 다 입력하지 않아도 된다. 이니셜로 접근해도 된다는 소리
    ex) student1Age -> s1a

문제 풀면서:

배열에 중괄호 통해 값을 바로 입력할 수 있다는 거 잊지 말기! 문제 풀 때 단순하게 접근하자!

한번에 선언한다 생각하면 되고, 중괄호로 배열에 미리 채워 놓으면 반복문 때도 쉽게 값을 읽어올 수 있다는 걸 잘 기억해 두자. 

클래스가 필요한 이유

한 학생의 데이터(이름, 나이, 성적)를(을) 각각 3개로 나누어 관리할 때 데이터를 변경/삭제 시 정말 주의해야 한다.

여러 학생의 데이터를 배열로써 관리한다고 하면 각각의 배열마다 정확하게 값을 찾아 변경/삭제해야 한다. 

 

  • 데이터베이스/엑셀에서 각각의 데이터 항목을 필드라고 하며, 클래스에서는 클래스 소속변수를 멤버변수, 필드라고 부른다. 
  • int, String, double 처럼 Student라는 학생 타입을 사용자가 직접 정의한다. 이때 이 설계도를 클래스라고 한다.
  • 설계도를 가지고 실제 메모리에 만들어진 실체를 객체/인스턴스라고 한다. 
  • 클래스는 모두 참조형이고 참조형인 클래스만 직접 정의 가능하다. 

입문 강의에서 배열을 배웠던 거랑 내용이 많이 일치해서 같은 맥락의 참조형 변수인가 생각했는데 맞았다.

new Student(클래스명)(); 을 하면 메모리 상의 참조값을 반환하고 이때 이 참조값(주소)을(를) 왼편의 Student student1 변수에 저장한다. 변수를 출력하면 패키지명.클래스명@16진수주소가 나온다.

 

  • student1.  => student1 변수에 있는 참조값을 통해 실제 객체에 접근한다.

객체(object)와 인스턴스(instance)

객체는 클래스에서 정의한 속성과 기능을 가진 실체다. 한 마디로 일반적인 의미에서 사용하는 말이라 이해하면 된다.

인스턴스는 객체보다 특정 클래스와의 관계에 더 초점을 맞춘 개념이다. 즉, 특정 클래스로부터 그 객체가 생성되었다는 것을 강조하고 싶을 때 사용한다.  

ex) student1은 Student의 인스턴스이다.

 

배열

Student 변수도 Student 타입이기 때문에 학생들을 Student 배열을 사용해 하나의 데이터 구조로 묶어서 관리할 수 있다. 즉, Student 배열의 각각의 항목이 Student 타입의 변수라는 것. 이것은 다시, 이 배열이 각각의 Student 타입의 참조값을 보관한다는 것을 의미한다. 객체에 접근할 수 있는 방법이 하나 늘어나는 거라 생각하자

 

참조값 얘기가 나왔을 때부터 c 포인터랑 상당히 닮아있다 했더니 이 얘기도 결국 포인터들의 배열을 의미하는 게 아닌가

c 포인터에서 많이들 포기하는 것처럼 자바는 참조형에서 많이 포기한다고 한다. 이 내용들이 어렵다는 것조차 알지 못하면 그냥 내가 문제인가보다- 하며 반복학습을 하게 되니 나름 수월하게 지나갔다ㅋㅋㅋ 이번 자바 강의에서는 갓영한 선생님으로부터 차근차근 들으니 처음부터 쉽게 이해할 수 있었다ㅎㅎ오예! 어쨌든 기본 문법부터 이 개념들까지 상당히 많이 겹치면서 자바랑 c가 한 배에서 나온 게 아닐까 생각했다. 근데 아니라고 한다. 

 

대원칙: 자바에서는 대입은 항상 변수에 들어 있는 값을 복사해서 전달한다.

  • 변수에는 인스턴스 자체가 들어있는 게 아니라 인스턴스의 위치를 가리키는 참조값이 들어있을 뿐이다.
    students[0] = student1;

문제 풀면서:

students[i] 이것도 출력문에서 매번 길게 작성하기 귀찮으니까 바로 앞에 Student s = students[i];로 변수 정의해 사용할 수 있다. 변수 정의하고 for 루프를 도는 이 과정이 향상된 for문에서 하는 거랑 똑같다는 걸 기억하자!

  • 팁: 배열이 들어가면 웬만하면 향상된 for문을 사용할 수 있다. 

기본형 vs 참조형

참조형: 실제 객체의 위치(참조, 주소)를 저장한다. ex) 클래스, 객체, 배열

기본형은 소문자로 시작하는데 int, long, double, boolean이 있고 기본형을 제외한 나머지 모두는 참조형이라 보면 된다.

참조형인 클래스만 직접 정의 가능한데 참조형은 대문자로 시작한다. 

 

cf. String

String은 대문자로 시작하는 것처럼 참조형인데 기본형처럼 문자 값을 바로 대입할 수 있다. 자주 다뤄져서 기본형처럼 사용한다고 이해하되, 이것도 문자열을 가리키는 참조값을 반환해서 사용한다는 것을 알자.

-- c랑 웬일로 다르나 했다

 

--끝--