[JAVA] 클래스

OneTwo·2022년 8월 5일

Java

목록 보기
5/7
post-thumbnail

Ⅰ. 클래스와 객체

1. 클래스란?

자바는 객체지향 프로그래밍 언어이다. 객체지향 프로그래밍 언어에서는 프로그램을 객체 단위로 실행한다.
클래스란 이 객체를 만들기 위한 틀이라고 생각하면 된다.
붕어빵 기계(클래스)로 붕어빵(객체)을 찍어낸다는 개념이다.

클래스는 다양한 자료형의 데이터를 하나로 묶고 이 데이터를 처리하는 기능을 추가하여 다양한 자료형의 데이터를 관리하고 처리할 수 있는 기능을 갖춘 문법 요소이다.
클래스의 내부 구성 요소로는

  • 필드: 클래스의 특징을 나타내는 변수 ( Ex. int radius =10;)
  • 메서드: 클래스가 지니고 있는 기능(함수)
  • 생성자: 클래스의 객체를 만드는 역할을 담당한다. 생성자는 반드시 클래스의 이름과 동일하여야 한다.
  • 이너 클래스: 클래스 내부의 클래스

우리는 클래스를 직접적으로 사용할 수 없고 클래스를 이용하여 객체를 생성하고
객체속의 필드와 메서드를 사용해야 한다.
클래스의 생성자로 객체를 만드는 과정을 '인스턴스화'라고 하며 그렇게 만들어진 객체를 '인스턴스' 라고 한다.

클래스는 다음과 같이 정의한다.

접근지정자(생략시 default) class 클래스명{
   ...
  }

2. 객체

객체는 new 키워드를 사용하여 생성한다.

클래스명 참조 변수명 = new 생성자();

Ex)
Circle cir = new Circle();

객체는 생성자를 통해 만든다고 하였고 new 키워드는 '~을 힙 메모리에 넣어라' 라는 의미이다.
즉, 위의 예시에서는 'Circle( ) 생성자로 만든 객체를 힙 메모리에 넣고
Circle 타입의 참조변수 cir에 주소값을 넣어라' 라는 의미이다.

클래스 Circle은 클래스 영역에 들어가고 참조변수는 스택영역에 들어가며 객체의 주솟값이 저장 될 것이다. 생성자로 만들어진 객체는 힙 메모리에 들어가며,
객체 내부에는 멤버(필드,메서드,이너 클래스)가 위치 할 것이다.

객체는 힙 메모리에 생성이 되지만 개발자는 힙 메모리에 직접 접근할 수 있는 방법이 없다. 따라서 주소값을 저장하고 있는 참조 변수를 이용하여 객체에
접근해야 한다.
이때 사용하는 것이 포인트 연산자( . )이다.

참조 변수명.필드명;
참조 변수명.메서드명();

Circle cir = new Circle();
System.out.println(cir.radius);    //참조 변수명.필드명
cir.getArea(5);                    //참조 변수명.메서드명()



Ⅱ. 클래스 내부의 구성요소와 this 키워드

1. 클래스 내부 구성요소

클래스 내부 구성요소 4가지(필드,메서드,생성자,이너클래스)중
필드,메서드,생성자에 대해 알아보자.

  1) 필드

  • 필드는 클래스에 포함된 변수이다.

  • 지역 변수와는 다른 개념으로 지역 변수는 메서드 내부에 포함된 변수이다.

  • 지역 변수는 스택 메모리에 생성되며 필드는 힙 메모리의 객체 내부에 생성된다.

  • 힙 메모리에는 빈 공간이 저장될 수 없기에 필드는 초기화를 시키지 않아도 자동으로 초기화가 된다.
    (boolean은 false / 정수형은 0 / 실수형은 0.0 / 이외의 참조 자료형은 null)

  2) 메서드

  • 메서드는 클래스의 기능에 해당한다.
접근 지정자 리턴 타입  메서드명(입력매개변수){
  메서드 내용
 }
 
 Ex)
 public int sum(int a,int b){
    return a+b;
 }
  • 리턴 타입은 메서드 종료 후 반환 되는 값의 자료형을 의미하며
    입력매개변수는 메서드에 전달되는 값이다.

  • 반환 타입으로는 void,int,double,boolean등이 있으며
    void는 반환 타입이 없다는 의미로 반환타입이 void인 메서드 내부의
    return은 메서드를 종료하라는 의미이다.

  • 클래스 외부에서 메서드를 호출할때는 객체를 만들어서 호출해야하지만
    같은 클래스 내부에 있는 메서드끼리는 객체를 만들지 않고 호출할 수 있다.

  • 메서드 시그니처란 메서드명과 입력매개변수의 자료형을 의미한다.
    JVM은 메서드 시그니처가 다르면 메서드명이 동일해도 다른 메서드로 인식한다.
    이를 이용하여 입력매개변수의 자료형혹은 개수가 다른 여러 개의 이름이 동일한 메서드를 같은 클래스에 정의할 수 있다.

  3) 생성자

  • 생성자는 객체를 생성하는 역할을 담당한다.

  • 반드시 클래스명과 동일하여야 한다.

  • 리턴 타입이 없다.

클래스명(입력매개변수){ 
   ...
}
  • 생성자를 만들지 않으면 컴파일러가 기본 생성자를 자동으로 추가한다.
    기본 생성자란 매개변수가 없는 생성자를 의미한다.

  • 생성자는 입력매개변수에 따라 객체를 생성하는 방법이 달라진다.


2. this 키워드와 this( ) 메서드

  1) this 키워드

클래스 내부에서는 객체의 생성없이 같은 클래스의 필드와 메서드를 바로 사용할 수 있다.
이렇게 객체없이 클래스 내부에서 필드 혹은 메서드를 사용할때 내부 객체 참조 변수명인 this키워드가 사용된다.
this키워드를 생략하면 컴파일러가 자동으로 추가해준다.

class Circle{
    int radius;
    
    void setRadius(int a){
    
       this.radius = a;   (this생략시 컴파일러가 자동으로 추가)
 
      }
}

컴파일러가 this키워드를 자동으로 추가해준다니 굳이 우리가 작성할 필요가 없다고 느낄 수 있지만 다음과 같이 지역 변수나 생성자의 입력매개변수가
필드명과 동일한 경우에는 반드시 명시적으로 this키워드를 작성해줘야 한다.

위의 예시에서 this키워드가 붙은 radius는 당연히 필드가 될것이다.

  2) this( ) 메서드

this( ) 메서드는 자신이 속한 클래스 내부의 생성자를 호출하는 명령어다.
this( ) 메서드는 다음 두가지의 규칙이 있다.

  • 생성자의 내부에서만 사용 할 수 있다.
  • 반드시 생성자의 첫 줄에 위치해야 한다.

참고자료

Do it! 자바 완전 정복

profile
매일 성장하는 개발자

0개의 댓글