(JAVA) 객체, 클래스 구성,변수의 종류

InAnarchy·2022년 10월 20일
0

JAVA

목록 보기
9/18
post-thumbnail

Table of Contents

  • 클래스와 객체
  • 객체의 구성요소
  • 객체 배열
  • 클래스의 구성
  • 변수의 종류

클래스와 객체

클래스: 객체의 설계도
객체: 실제로 존재하는 것
인스턴스: 클래스로부터 만들어진 객체

객체와 인스턴스의 차이는?

Tv t; //Tv클래스 타입의 참조변수 t(리모콘)를 선언. 
t = new Tv(); //Tv인스턴스를 생성한 후 생성된 인스턴스의 주소를 t에 저장
(Tv t = new Tv()과 동일)

에서 t은 객체이자 Tv의 인스턴스

new연산자는 객체를 생성하고 그 객체의 주소를 반환한다. 즉 그 객체의 주소가 참조변수 t에 대입된다.

인스턴스는 특정 객체가 어떤 클래스의 객체인지 "관계위주"로 설명할 때 사용됨.
즉 t는 객체, t는 Tv의 인스턴스 라고 표현할 수 있음.

객체의 구성요소

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

객체 배열

Tv t1,t2,t3과 같이 여러가지 객체를 다뤄야할 때 객체 배열을 생성해서 다룰 수 있다.

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()};

다룰 객체가 많으면 for문을 사용해도 된다.

Tv[] tvArr = new Tv[100];

for(int i = 0; i<tvArr.length; i++){
        tvArr[i]=new Tv();
}

클래스의 구성

클래스 - 사용자 정의타입(원하는 타입을 직접 만들 수 있다.)

  • 필드: 객체의 데이터가 저장되는 곳
    생성자와 메소드 전체에서 사용됨

  • 생성자: new 연산자로 호출되는 중괄호 블록
    객체 생성 시 초기화 역할 담당
    메소드와 비슷하지만 클래스 이름으로 되어있고 리턴 타입이 없음

  • 메소드: 객체의 동작에 해당하는 중괄호 블록

Animal이라는 클래스를 정의함
클래스에 name이라는 String변수(속성,인스턴스 변수) 추가
Animal 클래스의 인스턴스인 cat이 만들어짐
객체.객체변수(cat.name)의 형식으로 객체 사용

class Car{
    //필드
    String company = "테슬라";
    String model = "모델X";
    String color = "화이트";
    int maxSpeed = 350;
    int speed;
}
public class CarExample {
    public static void main(String[] args) {
        Car mycar = new Car(); //객체생성

        //필드값 읽기
        System.out.println("회사: " + mycar.company);
        System.out.println("모델명: " + mycar.model);
        System.out.println("색상: " + mycar.color);
        System.out.println("현재속도: " + mycar.speed);
        System.out.println("최고속도: " + mycar.maxSpeed);

        //필드값 변경
        mycar.speed = 60;
        System.out.println("진짜 현재속도: " + mycar.speed);
    }
}
class Tv {
    //Tv의 속성(인스턴스 변수)
    String color;
    boolean power;
    int channel;

    //Tv의 기능(메서드)
    void power() {
        power = !power;
    }

    void channelUp() {
        ++channel;
    }

    void channelDown() {
        --channel;
    }
}

class TvExample {
    public static void main(String[] args) {
        Tv t = new Tv();
        t.channel = 7;
        t.channelDown();
        System.out.println("현재 채널은 " + t.channel);
    }
}

변수의 종류

  • 인스턴스 변수
    인스턴스 변수는 클래스 영역에 선언되며 인스턴스를 생성할 때 만들어진다.
    인스턴스마다 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
  • 클래스 변수
    클래스 변수는 인스턴스 변수 앞에 static을 붙이기만 하면 되며, 모든 인스턴스가 공통된 저장공간을 공유한다. 객체 생성 없이 사용 가능하다.
  • 지역 변수
    메서드 내에 선언되어 메서드 내에서만 사용이 가능하다. 한 메서드{}를 벗어나면 사용될 수 없다.
    지역변수는 사용하기 전에 반드시 초기화해야한다.
    매개변수도 지역변수이다.

class InitTest{
	int x;
    int y = x; //인스턴스 변수
    
    void method(){
    	int i;
        int j = i//에러,초기화하지않음
        }
 }
class Card{
    String kind;
    int number;
    static int width = 100;
    static int height = 250;
}

public class CardExample {
    public static void main(String[] args) {
        System.out.println("Card.width: " + Card.width);
        System.out.println("Card.hegith: " + Card.height);

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

        Card c2 = new Card();
        c2.kind = "Spade";
        c2.number = 4;

        System.out.println("c1: " + c1.kind + "," + c1.number + "이고 크기는 (" + c1.width + "," + c1.height + ")");
        System.out.println("c2: " + c2.kind + "," + c2.number + "이고 크기는 (" + c2.width + "," + c2.height + ")");

        System.out.println("width, height 변경");

        c1.width = 50; //Card.width로 사용권장(cv)
        c1.height = 80; //Card.height로 사용권장
        System.out.println("c1: " + c1.kind + "," + c1.number + "이고 크기는 (" + c1.width + "," + c1.height + ")");
        System.out.println("c2: " + c2.kind + "," + c2.number + "이고 크기는 (" + c2.width + "," + c2.height + ")");
    }
}
profile
github blog 쓰다가 관리하기 귀찮아서 돌아왔다

0개의 댓글