안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
객체란?
- 사용할 수 있는 실체
클래스란?
- 객체를 만들기 위한 설계도
- 사물이나 개념의 공통 요소를 용도에 맞게 추상화함
※ 추상화 : 프로그램에서 필요한 기능/속성을 추출하고, 불필요한 것을 제거하는 과정
클래스 탄생 배경
① 변수 : 하나의 값을 저장하기 위한 공간
→ 데이터 종류가 많아질수록 데이터의 개수만큼 변수명을 짓거나 관리하는 일이 버거워짐
② 배열 : 변수의 단점을 보완하고자 만든 문법요소로, 같은 자료형끼리 여러개의 데이터를 저장할 수 있음
→ 여러개의 자료형을 한 번에 관리하고 싶어짐
③ 구조체 : 배열의 단점을 보완하고자 만든 문법요소로, 서로 다른 자료형도 하나로 묶어서 관리 가능
→ 말 그대로 데이터만 묶어놓은 것으로 출력 기능, 계산 기능 등을 추가하고 싶어짐 + 치명적인 단점 확인
④ 클래스 : 다양한 자료형의 데이터를 묶어 관리할 수 있을 뿐만 아니라 데이터를 처리하는 다양한 기능까지 함꼐 관리하는 문법 요소
클래스의 외부 구성요소
① 패키지 : 주석을 제외하고 반드시 첫 줄에 위치
② 임포트 : 다른 패키지의 클래스를 사용하고자 할 때 포함, 패키지 다음에 위치
③ 외부 클래스 : 1개의 .java 파일에 여러 개의 클래스가 위치할 수 있지만, 외부 클래스에는 public이 불가!! (public 클래스는 단 하나)
클래스의 내부 구성요소 (필드 + 메소드 + 이너클래스 => 클래스의 멤버)
① 필드 : 클래스의 특징(속성)을 나타내는 변수
② 메소드 : 클래스가 지니고 있는 기능(함수)
③ 생성자 : 클래스의 객체를 생성하는 역할
④ 이너 클래스 : 클래스 내부에도 클래스가 포함 될 수 있음
객체지향형 프로그램(OOP)
- 프로그램을 객체 단위로 수행하는 방식
만약 '학생' 객체를 생성한다고 가정해보았을 때 학생 class를 생성한 후,
* (이름, 성별, 나이) 와 같이 각 객체에 포함된 공통적인 데이터 속성/필드 생성
* (자기소개) 와 같이 동적인 작동, 기능을 하는 메소드 생성하는 것을 의미합니다.
package com.ce.java;
public class Student {
//속성(필드)
String name; //이름
char gender; //성별
int age; //나이
//기능(메소드)
public void introduce() {
System.out.printf("안녕하세요, 저는 %s입니다. %c자 %d살입니다.\n", name, gender, age);
}
}
package com.ce.java;
public class StudentMain {
public static void main(String[] args) {
//학생데이터 객체 생성 (클래스 내의 필드, 메소드를 사용하기 위해)
//class대로 new연산자를 호출해 메모리 heap에 적재된 것을 객체라고 함
Student stu = new Student();
//속성대입(필드에 값을 넣음)
stu.name = "홍길동";
stu.gender = '남';
stu.age = 24;
//기능호출(메서드 호출)
stu.introduce();
Student sin = new Student();
sin.name = "신사임당";
sin.gender = '여';
sin.age = 25;
sin.introduce();
}
}
@콘솔출력값
안녕하세요, 저는 홍길동입니다. 남자 24살입니다.
안녕하세요, 저는 신사임당입니다. 여자 25살입니다.
객체가 heap메모리에 생성되었기 때문에 속성대입이 없어도 기본값으로 초기화 된 값들이 리턴됩니다.
public class StudentMain {
public static void main(String[] args) {
Student stu = new Student();
// stu.name = "홍길동";
// stu.gender = '남';
// stu.age = 24;
stu.introduce();
Student sin = new Student();
sin.name = "신사임당";
sin.gender = '여';
sin.age = 25;
sin.introduce();
}
}
@콘솔출력값
안녕하세요, 저는 null입니다. 자 0살입니다.
안녕하세요, 저는 신사임당입니다. 여자 25살입니다.
클래스의 필드와 메소드를 사용하려면 클래스를 이용하여 객체 생성 후 사용이 가능합니다!
클래스의 생성자로 객체를 만드는 과정을 '인스턴스화'
인스턴스화로 만들어진 객체를 '인스턴스'
객체 속에 클래스 내부 구성 요소 중 생성자를 제외한 나머지 요소를 '인스턴스 멤버'
※ 클래스는 바로 사용할 수 없고 반드시 객체를 생성ㅇ해 객체 안에 있는 필드, 메서드 및 이너 클래스를 사용해야 합니다.
'Java > Java' 카테고리의 다른 글
변수) 전역변수(인스턴스 변수, static 변수), 지역변수 (0) | 2022.03.16 |
---|---|
객체 지향 3대 원칙) 캡슐화에 대해서, this. (0) | 2022.03.15 |
정렬 알고리즘) 값 교환, 순차 정렬, 선택 정렬 (0) | 2022.03.11 |
가변 인자(Variable Argument)란? (0) | 2022.03.11 |
main메소드의 입력 매개변수, 타입 변환 메소드 (0) | 2022.03.11 |