본문 바로가기
Java/Java

클래스와 객체) 클래스 내부/외부 구성요소, 객체지향형 프로그램(OOP)

by 박채니 2022. 3. 15.
SMALL

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


 

객체란?

- 사용할 수 있는 실체

 

클래스란?

- 객체를 만들기 위한 설계도

- 사물이나 개념의 공통 요소를 용도에 맞게 추상화함

※ 추상화 : 프로그램에서 필요한 기능/속성을 추출하고, 불필요한 것을 제거하는 과정

 

클래스 탄생 배경

① 변수 : 하나의 값을 저장하기 위한 공간

→ 데이터 종류가 많아질수록 데이터의 개수만큼 변수명을 짓거나 관리하는 일이 버거워짐

 

② 배열 : 변수의 단점을 보완하고자 만든 문법요소로, 같은 자료형끼리 여러개의 데이터를 저장할 수 있음

→ 여러개의 자료형을 한 번에 관리하고 싶어짐

 

③ 구조체 : 배열의 단점을 보완하고자 만든 문법요소로, 서로 다른 자료형도 하나로 묶어서 관리 가능

→ 말 그대로 데이터만 묶어놓은 것으로 출력 기능, 계산 기능 등을 추가하고 싶어짐 + 치명적인 단점 확인

 

④ 클래스 : 다양한 자료형의 데이터를 묶어 관리할 수 있을 뿐만 아니라 데이터를 처리하는 다양한 기능까지 함꼐 관리하는 문법 요소

 

 

클래스의 외부 구성요소

패키지 : 주석을 제외하고 반드시 첫 줄에 위치

임포트 : 다른 패키지의 클래스를 사용하고자 할 때 포함, 패키지 다음에 위치

외부 클래스 : 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살입니다.

 

클래스의 필드와 메소드를 사용하려면 클래스를 이용하여 객체 생성 후 사용이 가능합니다!

 

클래스의 생성자로 객체를 만드는 과정을 '인스턴스화'

인스턴스화로 만들어진 객체를 '인스턴스'

객체 속에 클래스 내부 구성 요소 중 생성자를 제외한 나머지 요소를 '인스턴스 멤버'

 

클래스는 바로 사용할 수 없고 반드시 객체를 생성ㅇ해 객체 안에 있는 필드, 메서드 및 이너 클래스를 사용해야 합니다.

 

LIST