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를 사용하지 않아도 된다.
또 문자열을 입력하는 경우엔
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인 것이다.
'# 개발 > Java' 카테고리의 다른 글
Java 연습문제 #3 - 숫자 야구 게임 만들기 (국비14일차) (0) | 2023.01.18 |
---|---|
Java 연습문제 #2 - console 입력 (국비14일차) (0) | 2023.01.18 |
Java #2 - 키보드 입력, Scanner, 연산자, 제어문, 반복문 (국비14일차) (2) | 2023.01.18 |
Java 연습문제 #1 (국비13일차) (0) | 2023.01.17 |
Java #1 - 개발 환경 구축, 화면 출력(print), 자료형 (국비13일차) (0) | 2023.01.17 |