본문 바로가기
객체지향 OOP

[자바의정석 기초 객체지향 개념] 클래스와 객체

by bzerome240 2022. 5. 29.

클래스

1 객체를 정의해 놓은 것 (설계도)

2 데이터 + 함수

3 사용자 정의 타입 - 원하는 타입을 직접 만들 수 있다.

  • 용도 - 객체를 생성하는데 사용

 

객체

: 실제 존재하는 것, 사물 또는 개념

: 쉽게 생각하면, 변수를 여러 개 묶어 놓은 것

  • 용도 - 객체가 가지는 기능과 속성에 따라 다름
  • 객체 = 속성(변수) + 기능(메서드)
  • 모든 인스턴스를 대표하는 용어 (인스턴스화: 클래스를 객체로 만드는 것)

ex) 클래스 : 객체 = 제품 설계도 : 제품

ex) 클래스 : 객체 = : TV 설계도 : TV

⭐ 변수 → 배열 → 구조체 → 클래스
  • 변수: 하나의 데이터를 저장할 수 있는 공간
  • 배열: 같은 종류의 데이터를 하나로 저장할 수 있는 공간
  • 구조체: 서로 관련된 데이터를 (타입 관계없이) 하나로 저장할 수 있는 공간
  • 클래스: 데이터와 함수의 결합 (구조체 + 함수)

 

💡 6-2~4 핵심
Q. 클래스가 왜 필요한가? A. 객체를 생성하기 위해
Q. 객체가 왜 필요한가? A. 객체를 사용하기 위해
Q. 객체를 사용한다는 것은? A. 객체가 가진 속성과 기능을 사용하는 것

 

 


 

1 클래스 작성하기 (설계도)

  • 기본적으로는 하나의 소스파일에 하나의 클래스가 작성된다
  • public class가 있는 경우 파일이름과 클래스명이 일치해야한다.

 

ex) Hello2.java

public calss Hello2 {}
// public calss Hello3 {} (X) public class should only be one
// public class Hello3 {} (X) public class should same with file name

 

  • public class가 없는 경우는 2개 이상의 클래스도 상관없다. ex) 책 예제

ex) Hello2.java

class Hello2 {}
class Hello3 {}
// public class hello2 {} (X) public class should same with file name's case

 

2 객체 생성하기 (제품 생성)

클래스명 변수명;          // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명();  // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장

Tv t = new Tv();         // Tv인스턴스 생성 후 생성된 Tv인스턴스의 주소를 참조변수 t에 저장

 

3 객체 사용하기 (제품 사용)

t.channel = 7;    // Tv인스턴스의 멤버변수 값을 선언하기
t.channelDown();

 

 


 

객체 여러 개 생성하기

  • 하나의 인스턴스를 여러개의 참조변수가 가리키는 것 → O
  • 여러 인스턴스를 하나의 참조변수가 가리키는 것 → X
Tv t1 = new Tv();   
Tv t2 = new Tv();   

t2 = t1; // 하나의 인스턴스를 t1, t2 참조변수가 가리키게된다.
t1.channel = 7
System.out.println(t2.channel) // 7

 

객체 배열 == 참조변수 배열

참조변수 3개

Tv tv1 = new Tv();
Tv tv2 = new Tv();
Tv tv3 = new Tv();

참조변수 3개를 하나의 배열로 만든 객체 배열 (참조변수 배열)

Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열 (객체 배열)

// 객체 생성
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

// 위를 축약하면 Tv[] tvArr = { new Tv(), new Tv(), new Tv() };

 

 


 

비객체지향적 코드 → 객체지향적 코드

int hour = 12;
int min = 34;
int sec = 56;

👇

class Time {
	int hour;
	int min;
	int sec;
}

Time t = new Time();
t.hour = 12;
t.min = 34;
t.second = 56;

 

 


 

선언 위치에 따른 변수의 종류

  1. 클래스 영역 - 클래스 변수 (cv), 인스턴스 변수 (iv)
    1. 클래스 영역에는 선언문만 가능 (변수 or 메서드 선언)
  2. 메서드 영역 - 지역 변수(lv)

💡 인스턴스 변수의 생성 시기는 인스턴스(객체)가 생성되었을 때 이다.
클래스 변수는 자동으로 생성된다. (따로 생성 안 해도 사용 가능)

 

 

클래스 변수 vs 인스턴스 변수

  • 공통적으로 유지돼야하는 것은 static을 붙여야 한다.
Class Card {
	// 인스턴스 변수 - 개별 속성
	String kind;
	int number;

	// 클래스 변수 - 공통 속성
	static int width = 100;
	static int height = 250;
}

public static void main(String argsp[]) {
	System.out.println("card width: " + Card.width + " height: " + Card.height);

	Card c1 = new Card();
	c1.kind = "heart";
	c1.number = 7;

	System.out.println("c1: " + c1.kind + " number: " + c1.number);
}

 

 


 

 

728x90
반응형

댓글