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

 

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

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

 

 

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

알아야 한다.

객체는 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 함수 안에)

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

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

struct를 쓸 필요가 없다.

 

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

const를 붙여줘야 한다.

문자열 변수의 변화

 

 

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

기존의 C언어에서 struct는

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

 

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

구조체 내에 기능까지 포함

이렇게 말이다.

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

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

 

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

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

 

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

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

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

 

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

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

 

 

 

Class

 

1. Class의 탄생

 

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

변수와 함수를 다 쓰면

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

 

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

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

 

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

또 여러 가지 이유로

멤버의 사용법이 다르다.

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

 

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

private(dafault), protected, public

이 바로 그것이다.

public:이라고 선언을 해줘야

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

 

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

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

 

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

 

 

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

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

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

this 가 특별한 키워드이고

사진처럼 하면 된다.

 

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

코드도 깔끔해진다.

 

4. 생성자 함수

 

여기서 더 나아가보면

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

한 줄로 선언한 적이 있다.

예를 들어

int a = 10;

과 같이 말이다.

 

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

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

 

 

class 안에 동일명을 가진

함수를 만들어야 한다.

 

규칙은 크게 2개인데

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

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

 

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

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

이를 이용하면 앞서 말한 

int a = 10;

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

 

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

 

실행해 보면

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

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

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

 

 

 

 

 

객체

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

 

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