객체의 구성 멤버

 

▶ 클래스 (class)

- 객체를 만들어 내개 위한 틀

- 하나의 클래스는 필드(Field), 생성자(Constructor), 메소드(Method)로 구성된다

- ex) 반죽틀 = Class

더보기

✔ 클래스 접근제한자

  구분 같은 패키지 내 전체 예시
+ public O O public
public class 클래스명 {
      // ............
}
~ (default) O   class 클래스명 {
      // ............
}

 

✔ 클래스 선언 예시

public final class Exam01 {

private static int Age;		//필드:속성값 설정
public static String Name;

public Exam01( ) {		//생성자	
}
public void printAge(int Age) {	//메소드:기능정의 설정
	}
}
더보기
//클래스
public class Phone {
	
	public String os;
	public Long memory;
	public Long pixel;
	public boolean is5GPossible;
	
	public void call(String number){
		...
	}
	
	public void takeAPicture() {
		...
	}
		...

}

▶ 객체 (object)

- 컴퓨터가인식하게 클래스를 통한 new연산자를 통해 메모리 영역에 생성한 것

- 소프트웨어 세계안에서 구현해야할 대상, 아직 구현은 안됨, 선언한 객체는 아직 어떠한 메모리도 차지하지 않음

- 붕어빵 = Object

더보기

 객체 지향 언어란?

현실에 존재하는 독립적이면서 하나로 취급되는 사물이나 개념으로

객체 지향 언어에서 객체의 개념은 클래스에 정의된 내용대로 메모리에 할당된 결과물

 객체의 할당

new연산자와 생성자를 사용하여 객체 생성 시 heap 메모리 공간에 서로 다른 자료형의 데이터가 연속으로 나열/할당된 객체 공간

객체의 할당 예시

 클래스

  • 메모리 영역에 생성 할 객체를 찍어내는 설계도, 틀
  • 객체의 특성에 대한 정의를 한 것으로 캡슐화를 통해 기능을 포함한 개념
  • 프로그램에 필요한 사물이나 개념의 공통 요소를 추상화하여 정의

 추상화

  • 유연성을 확보하기 위해 구체적인 것은 제거한다는 의미
  • 프로그램에서 필요한 공통점을 추출하고 , 불필요한 공통점을 제거하는 과정

 캡슐화란?

  • 추상화를 통해 정리된 데이터들과 기능을 하나로 묶어 관리하는 기법
  • 클래스의 가장 중요한 목적인데이터의 접근제한을 원칙으로 하여 
  • 클래스 외부에서 데이터의 접근을 막고, 대신 데이터를 처리하느 함수들을 클래스 내부에 작성하는 방법

 특성

  • 추상화 단위가 된다
  • 재사용 단위가 된다
  • 정보 은닉을 실현한다

 원칙

  • 클래스의 멤버 변수에 대한 접근 권한은 private을 원칙으로 한다.(외부에서 클래스 멤버 변수에 담긴 데이터를 직접적으로 접근하지 못하게 하기 위해서)
  • (그럼 안에 있는 내용을 수정하고 싶을때는 어떻게 할까? 그럴때는 내부에 있는 기능에서 외부에서 접속이 가능한 메소드를 만들어줘서 직접적으로 접근은 하지 못하지만 내부에 있는 메소드를 통해서만 수정이 가능하도록 할 수있게 하는거다)
  • 클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 함수들을 크래스 내부에 작성한다
  • 멤버 함수는 클래스 밖에서 접근할 수 있도록 public으로 설정한다
더보기
/* 객체와 인스턴스 */
public class Phone {
  public static void main(String[] args) {
    Phone Galaxy20, IPhone11; // '객체'(구현해야할 대상, 아직 구현은 안됨)
  }
}

▶ 인스턴스 (instance)

- 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다 즉 메모리에 객체가 할당된걸 의미

- 자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체를 선언해야 한다  클래스로부터 객체를 만드는 과정을 인스턴스화 라고 한다.

- 개념적으로 인스턴스는 객체와 같거나 객체에 포함된다

- 붕어빵을 굽다 = 인스턴스화

- 만들어진 각각의 붕어빵 = 인스터스

더보기
/* 객체와 인스턴스 */
public class Phone {
  public static void main(String[] args) {
    Phone Galaxy20, IPhone11; // '객체'

    // 인스턴스화
    Galaxy20 = new Phone(); // Galaxy20은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)
    IPhone11 = new Phone(); // IPhone11은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}

 

붕어빵으로 비유하자면

o 붕어빵 틀 = Class                     

o 붕어빵 = 객체(Object)
o 붕어빵을 굽다 = 인스턴스(Instance)화 하다
o 만들어진 각각의 붕어빵 = Instance  

붕어빵을 class에 대입하면

→ 붕어빵을 굽기위해 틀에 재료 넣기

먼저 붕어빵 틀에 밀가루 반죽과 팥을 집어넣겠습니다.

색깔변로 붕어빵을 먹고 싶어서, 붕어빵에 색깔별로 이름을 붙일게요.

각각의 붕어빵에 밀가루 반죽과 팥의 양을 각각 다르게 집어넣었습니다.

이제 '굽다( )'라는 메소드를 호출해서 붕어빵을 굽겠습니다.

→ 이제 붕어빵을 굽겠습니다

붕어빵이 구워지고 있습니다.

지금 구워지는 과정이 인스턴스화 하고 있는 겁니다.

→ 붕어빵이 다 구워졌습니다

드디어 각각의 붕어빵(객체)가 완성됬습니다.

붕어빵들을 살펴보면 같은 틀에서 구워졌지만 자신들만의 개성을 가지고있죠.

그 각각의 개성을 가진 녀석들(실제 붕어빵들)을 인스턴스라고 부르는 겁니다

class 붕어빵틀 {
	// Variable 인스턴스 변수 : 재료 넣기
	private String name;
	private int flour;
	private int redbean;
	
	// Constructor 생성자 : 메소드:굽기를 호출
	public 붕어빵틀 (String name0,int flour0,int redbean0) {
		this.name = name0;
		this.flour = flour0;
		this.redbean = redbean0;
		bake();
	}
	// Method 메소드 : 굽기
	private void bake() {
		System.out.println(name+"에 반죽,팥"+flour+","+redbean+"이 들어간 붕어빵이 만들어 졌습니다");
	}
}

public class 붕어빵_만들기 {
	public static void main(String[] args) {
		// 붕어빵틀에 재료의 양을 조절해 분배하고 굽기 = 인스턴스화
		붕어빵틀 a = new 붕어빵틀("빨간붕어빵",2,3);
		붕어빵틀 b = new 붕어빵틀("노랑붕어빵",2,2);
		붕어빵틀 c = new 붕어빵틀("초록붕어빵",3,3);
		//완성된 인스턴스
	}
}

'Language > Java' 카테고리의 다른 글

Class - 필드(변수)  (0) 2022.01.03
package와 import  (0) 2022.01.02
배열 복사  (0) 2021.12.29
2차 배열  (0) 2021.12.24
반복문 (for, while문)  (0) 2021.11.29