클래스

khs·2022년 9월 26일
0

자바

목록 보기
2/3

클래스

Java 클래스 파일은 Java Virtual Machine에서 실행할 수있는 Java 바이트 코드를 포함하는 파일이다. Java 클래스 파일은 일반적으로 Java 클래스를 포함하는 Java 프로그래밍 언어 소스 파일에서 Java 컴파일러에 의해 생성되며 쉽게 말해 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다.


클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성된다. 필드(field)는 클래스에 포함된 변수(variable)를 의미하며 메소드(method)는 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있다.

하나의 소스파일에는 하나의 클래스만 작성하는 것이 바람직하며 소스파일의 이름은 public class이름과 일치해야한다. 만약 하나의 소스파일에 여러개의 클래스를 작성할시에 하나의 public class만 허용하며 나머지 클래스는 class로 작성

객체와 인스턴스

자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체를 선언해야 한다. 이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 하며 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 한다. 즉, 인스턴스란 메모리에 할당된 객체를 의미한다.


객체는 아래와 같이 만들 수 있다.

class Animal{}

public class Sample{
	public static void main(String[] args) {
    	Animal cat = new Animal();
    }
}

new 는 객체를 생성할 때 사용하는 키워드이다. 이렇게 하면 Animal 클래스의 인스턴스(instance)인 cat, 즉 Animal의 객체가 만들어진다.

뿐만 아니라 아래와 같이 무수히 많은 동물 객체(cat, dog, horse, ...)들을 Animal 클래스로 만들 수 있다.

Animal cat = new Animal();
Animal dog = new Animal();
Animal horse = new Animal();

객체와 인스턴스
객체와 인스턴스의 차이는 무엇일까?
Animal cat = new Animal() 이렇게 만들어진 cat은 객체이다. 그리고 cat이라는 객체는 Animal의 인스턴스이다. 인스턴스라는 말은 특정 객체(cat)가 어떤 클래스(Animal)의 객체인지를 관계위주로 설명할 때 사용된다. 즉, "cat은 인스턴스" 보다는 "cat은 객체"라는 표현이 "cat은 Animal의 객체" 보다는 "cat은 Animal의 인스턴스" 라는 표현이 훨씬 잘 어울린다.

변수

변수에는 3가지가 있다.

  1. 인스턴스 변수 (iv)

    • 클래스 영역 변수
    • 인스턴스가 생성되었을 때 생성
    • 개별 속성
  2. 클래스 변수 (cv)

    • static + 클래스 영역 변수
    • 클래스가 메모리에 올라갈 때 생성
    • 공통 속성
  3. 지역 변수 (lv)

    • 메서드 영역 변수
    • 변수 선언문이 수행되었을 때 생성
    • 지역 변수는 꼭 수동 초기화 해야한다. (인스턴스 변수, 클래스 변수는 자동 초기화)


class Variables{
	int iv; // 인스턴스 변수
    static int cv; // 클래스 변수 (static변수, 공유변수)
    			   // cv를 사용할 때는 Variables.cv 와 같이 사용    
    void method(){
    	int lv = 0; // 지역변수
    }
}

클래스 영역에는 선언문 (변수선언, 메서드 선언)만 가능하다.
선언 순서와는 상관이 없다. 아래의 코드는 age라는 이름의 지역변수를 선언한 것이다.

class Animal{
	int age = 10;
}

public class Sample{
	public static void main(String[] args) {
    	Animal cat = new Animal();
        System.out.println(cat.age);
    }
}

결과는 10으로 출력된다. 하지만 모든 동물의 나이가 모두 10은 아니기 때문에 객체에 맞게 값을 대입해야한다. 변수에 값을 대입하는 방법에는 여러가지가 있지만 가장 보편적인 메소드를 이용하는 방법에 대해 알아보자.


메소드

메소드는 클래스 내에 구현된 함수를 의미하는데 보통 함수라고 말하지 않고 메소드라고 하며 객체의 동작 처리 내용을 말한다. 메소드를 정의하는 방법은 다음과 같다.

접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
// 구현부
}

  1. 접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시
  2. 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시
  3. 메소드 이름 : 메소드를 호출하기 위한 이름을 명시
  4. 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시
  5. 구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합

하나의 클래스에 같은 이름의 메소드를 둘 이상 정의할 수 없지만 하지만 메소드 오버로딩(overloading)을 이용하면, 같은 이름의 메소드를 중복하여 정의할 수 있다. 메소드 오버로딩이란 매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것을 뜻한다. (나중에 한 번은 이와 관련해서 글을 쓸 예정 ..!)

매개변수와 인수

public class Sample {
    int sum(int a, int b) {  // a, b 는 매개변수
        return a+b;
    }
    public static void main(String[] args) {
        Sample sample = new Sample();
        int c = sample.sum(3, 4);  // 3, 4는 인수
        System.out.println(c);  // 7 출력
    }
}
profile
권혁상입니다. 행복코딩^_^

0개의 댓글