Java #0 - 객체 (국비12일차)

 

java에 들어가기 앞서 객체가 무엇인지 알아보고 

이해하는 시간을 가져야 한다.

 

 

우선 객체를 알기 위해선 객체가 어디로부터 왔는지

알아야 한다.

etc-image-0

객체는 class라는 설계도로부터 나온 것이다.

그런데 이 class는 C++언어의 class로부터 나온 것이고

C++의 class는 C++의 struct로부터 나온 것이다.

 

그리고 C++의 struct는 

c언어에서 온 것이다.

 

즉 객체를 알기 위해선 c언어의 struct를 제대로 알아야 한다.

(2023.01.13 - [C언어/강의] - c언어 #9 - 구조체 (국비 11일 차))

 

 

C언어와 C++ 구조체(struct)의 차이

 

 

1. struct를 안 써도 됨(main 함수 안에)

etc-image-1

다만 달라진 것은 main 함수에서 구조체를 사용할 때

struct를 사용하지 않아도 된다.

etc-image-2
struct를 쓸 필요가 없다.

 

또 문자열을 입력하는 경우엔

const를 붙여줘야 한다.

etc-image-3
문자열 변수의 변화

 

etc-image-4

 

2. 기능까지 포함 (변수와 함수를 포함하는 구조체)

기존의 C언어에서 struct는

단순히 여러 변수를 저장하는 새로운 자료형에 불과했다.

 

그러나 C++ 에선 기능까지 포함시킬 수 있다.

etc-image-5
구조체 내에 기능까지 포함

이렇게 말이다.

void output 입장에선 name, kor, eng, avg가 전역변수라서

따로 파라미터를 설정할 필요도 없다.

 

etc-image-6

이를 이용하면 쉽게 출력도 가능하다.

stu.output(); 이런 방식으로 말이다.

 

그럼 Student stu;는 더 이상 구조체 변수가 아니다.

함수 기능까지 가지고 있기 때문이다.

etc-image-7

그래서 우린 이것을 Object(객체)라고 부르기로 했다.

 

etc-image-8

기존에는 변수를 선언한다 표현했는데

객체는 생성이라는 표현을 사용한다.

 

 

 

Class

 

1. Class의 탄생

 

그런데 기존 구조체를 사용하는 과정에서

변수와 함수를 다 쓰면

기존 c언어 개발자가 정의한 구조체와 개념이 달라진다.

 

그래서 이 구조체(여러 변수를 한 번에 저장)와 개념을 분리하기 위해서

객체를 만들 수 있는 Class를 만들었다.

 

구조체와 class를 구별하기 위해서

또 여러 가지 이유로

멤버의 사용법이 다르다.

2. 다른 사용법 (새로운 문법)

 

객체엔 새로운 문법인 접근 제한자라는 것이 있다. 

private(dafault), protected, public

이 바로 그것이다.

etc-image-9

public:이라고 선언을 해줘야

아래 멤버 변수와 멤버 함수를 main 함수에서 인식하게 된다.

 

그리고 main 함수에서 멤버 변수를 입력할 때

private은 보이지 않고, public으로 선언한 것만 보이게 된다.

 

3. 멤버 변수에 입력하는 기능

 

etc-image-10

 

class안에 새로운 함수를 만든 다음

객체 본인을 지칭하는 특별한 키워드를 사용해서

멤버 변수에 값을 입력해줘야 한다.

this 가 특별한 키워드이고

사진처럼 하면 된다.

 

etc-image-11

이 기능을 이용하면 입력도 간단해지며

코드도 깔끔해진다.

 

4. 생성자 함수

 

여기서 더 나아가보면

우리는 앞서 변수를 선언할 때 값을 초기화해 줌으로써

한 줄로 선언한 적이 있다.

예를 들어

int a = 10;

과 같이 말이다.

 

이런 방식을 여기서도 사용이 가능하다. 

다만 먼저 해야 할 것들이 있다.

 

etc-image-12

 

class 안에 동일명을 가진

함수를 만들어야 한다.

 

규칙은 크게 2개인데

1. 함수 이름은 class 이름과 같아야 하고

2. 리턴 타입을 명시하면 안 된다.(void 아님)

 

이 함수는 객체가 생성되면 자동으로 실행되는 특별한 함수이다.

이런 함수를 생성자 함수라고 하며

이를 이용하면 앞서 말한 

int a = 10;

과 같이 초기화하듯이 가능하다.

 

etc-image-13

이렇게 main 함수가 깔끔해진다.

 

실행해 보면

etc-image-14

생성자 함수에서 제일 먼저 출력한 문구가 매번 맨 앞에 나오며

매개변수를 통해 변수를 받아 class에 저장하고 

show()를 통해 출력하는 형태를 가진다.

 

 

 

 

 

객체

서로 관련 있는 변수들과 관련 기능들을 가지고 있는 것을 말한다.

 

이를 설계해 놓은 것이 class인 것이다.