클래스와 객체

GW·2023년 7월 22일
post-thumbnail

클래스와 객체

클래스의 정의

  • 클래스란 객체를 정의해 놓은 것

클래스의 용도

  • 클래스는 객체를 생성하는데 사용

객체의 정의

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

겍체의 용도

  • 객체가 가지고 있는 기능과 속성에 따라 다름

객체= 속성(변수) + 기능(메서드)

속성 = 크기, 길이, 높이, 색상, 볼륨, 채널 등
기능 = 켜기, 끄기, 볼륨 높이기, 볼륨낮추기 등..

객체: 모든 인스턴스를 대표하는 일반적 용어
인스턴스 : 특정 클래스로부터 생성된 객체(예 TV인스턴스)

  • 두개다 같은 말이라고 생각

  • 설계도로 제품을 생성해서 제품을 사용한다
  • 즉 클래스를 인스턴스화 해서 객체를 사용한다.

Q.클래스가 왜 필요한가?

  • 객체(제품) 생성하기 위해

Q.객체가 왜 필요한가?

  • 객체를 사용하기 위해

Q.객체를 사용한다는 것은?

  • 객체가 가진 속성(변수)과 기능(메서드)을 사용하려고

객체의 생성과 사용

1.객체의 생성

2. 객체의 사용

Tv t1= new Tv();
Tv t2 = new Tv();
t1.channel=7;

만약 t2=t1이라고 가정하면

  • t2의 메모리주소가 없어지고 객체도 사용할수 없다. (GC가 청소해줌)


1. 하나의 인스턴스를 여러 개의 참조변수가 가리키는 경우(가능)
2. 여러 인스턴스를 하나의 참조변수가 가리키는 경우(불가능)

class Tv { 
     // Tv의 속성(멤버변수) 
     String color;           	// 색상 
     boolean power;         	// 전원상태(on/off) 
     int channel;           	// 채널 

     // Tv의 기능(메서드) 
     void power()   { power = !power; }  // TV를 켜거나 끄는 기능을 하는 메서드  
     void channelUp()   {  ++channel; }  // TV의 채널을 높이는 기능을 하는 메서드 
     void channelDown() { --channel; }   // TV의 채널을 낮추는 기능을 하는 메서드  
}

class TvTest { 
      public static void main(String args[]) { 
            Tv t;                  // Tv인스턴스를 참조하기 위한 변수 t를 선언       
            t = new Tv();          // Tv인스턴스를 생성한다. 
            t.channel = 7;         // Tv인스턴스의 멤버변수 channel의 값을 7로 한다. 
            t.channelDown();       // Tv인스턴스의 메서드 channelDown()을 호출한다. 
            System.out.println("현재 채널은 " + t.channel + " 입니다."); 
      } 
} 

클래스의 정의

클래스

  • 설계도
  • 데이터 + 함수
  • 사용자 정의타입

사용자 정의타입

  • 원하는 타입을 직접 만들 수 있다.

시간

int hour;   
int minute;    => Time t = new Time();
int secoond 

int hour1, hour2, hour3;             Time t1 = new Time();
int minute1, minute2, minute3;    => Time t2 = new Time();
int secoond1, secoond2, secoond3     Time t3 = new Time();

//시간끼리 묶인다는 문제가 있음 		Time[] t = new Time[3];	
int[] hour = new int[3]; 		  t[0] = new Time();	
int[] minute = new minute[3]; =>  t[1] = new Time();
int[] second = new second[3];     t[2] = new Time();

그래서 사용자 정의타입인
class Time{
	int hour;   
	int minute;
	int secoond ;
}

클래스를 사용함으로써 코드가 덜 복잡해지고 유지보수 하기가 더 쉬워짐

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

클래스 영역

  • 클래스 시작부터 클래스 끝까지
  • 선언문만 가능 (변수선언, 메서드 선언)
  • y=x+3, systemprint() 불가능
  • 선언문의 순서는 상관없다
class Time{
	int hour;    //iv
    int minute;  //iv
    int second;  // iv
    
    객체를 생성해야 iv 사용가능
    반대로 객체란? iv를 묶어 놓은것 이라고 할 수 있다.

}

클래스 변수와 인스턴스 변수

클래스 변수와 인스턴스 변수의 차이

3장의 카드가 있다.
속성에는 무늬, 숫자, 폭, 높이가 있는데 모든 카드의 폭과 높이는 공통된 값을 가져야하고 무늬와 숫자는 다른 값을 가져야 한다.

class Card{
	String kind; // 무늬
    int number; // 숫자
    인스턴스 변수 ( 개별속성) iv
    
    static int width = 100; // 폭
    static int height = 250; // 높이
    클래스 변수(공통 속성) cv
}

iv와 cv 사용법

class Card{
	String kind; // 무늬
    int number; // 숫자
    인스턴스 변수 ( 개별속성) iv
    
    static int width = 100; // 폭
    static int height = 250; // 높이
    클래스 변수(공통 속성) cv
    
    public static void main(String[] args){
    
    	Card c = new Card();
        c.kind = "HEART";
        c.number = 5;
        
        Card.width = 200;
        Card.height = 300;
        //cv 클래스 변수는 클래스 이름을 사용해야한다.
        // cv는 객체생성없이 바로 사용 할 수 있다.
        
    }
    
}

1개의 댓글

comment-user-thumbnail
2023년 7월 22일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기