[Java] OOP_클래스(Class)와 객체(Object)

jeong·2021년 5월 19일
0

Java 자바

목록 보기
10/28
post-custom-banner

클래스(Class)와 객체(Object)

클래스(Class)

: 객체를 정의, 객체를 생성하는데 사용된다.
객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메소드로 구성되어있다.

클래스와 객체의 정의

클래스객체
제품설계도제품
  • 클래스 : 객체를 정의해놓은 것
  • 객체 : 실제로 존재하는 것

클래스를 선언할 때는
생성자(Constructor)와 메소드(Method)를 필수로 만들어줘야 한다.***
(필드는 선택 가능함)

클래스를 따로 해야하는 이유

전문성을 위해 여러개의 class를 만든다.
수정할 때 전체를 다 갈지 않아도 됨

//이해를 위한 예시
국어 - 선생님1
영어 - 선생님2
수학 - 선생님3
...

클래스의 구성 멤버

public class ClassName{
    //필드(Field) -  객체의 데이터가 저장되는 곳
    int fieldname;
    
    //생성자(Constructor) - 객체 생성 시 초기화 역할 담당
    ClassName() {
    ...;
    }
    
    //메소드(Method) - 객체의 동작에 해당하는 실행 블록
    void methodName(){
    ...;
    }
    
}
  • 필드(Field) : 클래스에 포함된 변수, 생성자와 메소드 전체에서 사용된다.
  • 메소드(Method) : 특정 작업을 수행하기 위한 명령문의 집합. 객체의 동작에 해당하는 {}블록.
  • 생성자(Constructor) : new 연산자로 호출됨. 클래스 이름으로 되어 있다.

객체

객체 = 인스턴스
객체는 인스턴스(instance)를 포함하는 일반적인 의미

클래스를 정의할 때 객체의 속성은 변수로, 기능은 메소드로 정의한다.

//객체의 구성요소
class Tv {
    //객체의 속성 : 크기, 길이, 색상, 채널, 전원상태...
    //객체의 속성은 변수로 정의한다.
    String color;
    boolean power;
    int channel;
    
    //객체의 기능 : 켜기, 끄기, 볼륨 높이기, 채널 높이기...
    //객체의 기능은 메소드로 정의한다.
    void power() {power=!power;}
    void channelUp(channel++;)
    void channelDown{channel--;}
}

인스턴스 생성

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

//객체 생성 예시
Car mycar = new Car(); //객체 생성
myCar.accelerate(60,3);
//마이카 인스턴스 accelerate()메소드를 호출함 
Tv t; 
t=new Tv();

//한 개의 실행문으로도 작성 가능
Tv t=new Tv();

인스턴스의 생성과 사용

Tv t1=new Tv();
Tv t2=new Tv();
t2=t1; //t1의 값을 t2에 저장
t1.channel=7;
System.out.prinln(t1.channel);
System.out.prinln(t2.channel);

클래스의 또 다른 정의

1) 클래스 = 데이터+함수의 결합
구조체+함수

- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 타입의 여러 데이터를 저장할 수 있는 공간
- 구조체 : 타입에 관계없이 서로 관련된 데이터를 저장할 수 있는 공간

2) 클래스 - 사용자 정의 타입(User-defined type) :
프로그래머가 직접 새로운 타입을 정의할 수 있음
서로 관련된 값을 묶어 하나의 타입으로 정의함

//3가지 인티저를 class Time으로 묶을 수 있다. 
class Time {
    int hour;
    int minute;
    int seconds;
}

//사용
Time t=new Time();
profile
배우는 초보개발자
post-custom-banner

0개의 댓글