포스트

객체, 클래스, 인스턴스, 메서드의 정의, 관계 및 차이

강의 내용 복습 : 코리아IT 신촌점 Java 강의 (2024-04-25 강의)

  • Tool :
    Java Eclipse


🔔 객체(Object)

📌 객체 정의

  • 객체란 현실 세계에 존재하는 사물 또는 개념 중 소프트웨어로 모델링할 가치가 있는 것입니다.
  • 객체는 속성과 기능을 가지며 프로그래밍을 통해 이들을 변수와 메서드로 표현합니다.
  • 소프트웨어로 모델링할만한 객체의 예시로는 자동차, 책, 사람 등이 있습니다.

📌 객체 구현(예시)

  • Java에서는 클래스로 객체가 구현됩니다.
  • 아래는 자동차, 책, 사람이라는 객체를 모델링한 결과입니다.
  • 각 클래스의 이름은 Car, Book, Person입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Car {

    String name;
    String company;
    int price;

}

public class Book {

    String title;
    String author;
    String company;
    int price;

}

public class Person {

    String name;
    String gender;
    int age;

}

📌 객체 지향 프로그래밍(OOP; Object Oriented Programming)

  • 기본 단위의 객체를 이용하여 소프트웨어를 설계하고 구현하는 프로그래밍 패러다임입니다.
  • 즉, 작은 단위의 객체를 이용하여 큰 단위의 애플리케이션을 개발하는 방법론입니다.
  • 이 방법의 장점은 코드의 재사용성, 보수성, 확장성이 좋다는 것입니다.
  • 참고로 객체 지향 프로그래밍과 절차적 프로그래밍(PP)이 반대되는 개념은 아닙니다.
  • 기본적인 개발 방식은 절차적으로 프로그래밍하는 것이고 파생 또는 응용된 개념이 OOP입니다.

📌 프로그래밍의 필요성

  • 프로그래밍을 하는 이유 중 하나는 현실 세계에 존재하는 것을 모델링하기 위해서입니다.
  • 소프트웨어로 모델링하는 목적은 작업의 자동화, 불확실성 최소화, 서비스 제공 등 다양합니다.
  • 역사적으로 컴퓨터의 발전은 수학적 계산(computing)을 자동화 한 도구로 시작되었습니다.
  • 현실 세계에서 자연스럽게 사용하는 모든 전자제품, 가전제품 등 역시 모델링의 결과물입니다.


🔔 클래스(Class)

📌 클래스 정의

  • 클래스는 객체의 설계도이며 객체의 속성과 기능이 변수와 메서드로 정의된 것입니다.
  • 즉, 클래스는 객체를 소프트웨어로 모델링하기 위한 프로그래밍 구조입니다.

📌 컴파일(Compile)

  • 컴파일이란 고수준 언어로 작성된 소스 코드가 저수준의 바이트 코드로 변환되는 과정입니다.
  • 고수준 언어란 인간이 이해할 수 있는 것이고 저수준 언어란 기계가 이해할 수 있는 것입니다.
  • 즉, 컴파일은 소스 코드 파일(.java)이 클래스 파일(.class)로 변환되는 것입니다.
  • 참고로 IntelliJ 등의 IDE에서는 코드 작성 및 저장 시 컴파일 과정이 자동으로 수행됩니다.


🔔 인스턴스(Instance)

📌 인스턴스 정의

  • 인스턴스란 클래스에 기반하여 생성자 메서드로 생성된 실제 구현체입니다.
  • 즉, 클래스에 정의된 속성(변수)에 구체적인 값이 할당된 상태를 뜻합니다.
  • 따라서 인스턴스는 객체가 클래스로 컴파일 된 이후 존재할 수 있습니다.
  • 왜냐하면 기계가 이해할 수 있는 언어로 변환된 상태여야 되기 때문입니다.
  • 그래서 IDE에서 작성한 소스 코드를 저장(컴파일)해야만 인스턴스를 생성할 수 있습니다.
  • 실무적인 표현으로는 .java 파일을 저장해야 인스턴스 생성 시 에러가 발생되지 않습니다.

📌 클래스와 인스턴스의 작명법 차이

  • Java에서는 객체/클래스와 변수/메서드/인스턴스의 작명법이 상이합니다.
  • 객체 및 클래스의 이름은 모든 음절의 첫 글자가 대문자로 시작됩니다.
  • 변수, 메서드 및 인스턴스의 이름은 두 번째 음절의 첫 글자부터 대문자로 시작됩니다.
  • 작명법은 코드의 가독성과 유지 관리하는 데 있어 중요한 역할을 합니다.
  • 참고로 변수/메서드/인스턴스의 작명법을 ‘카멜 케이스(CamelCase)’라고 합니다.

📌 인스턴스 구현(예시)

  • 인스턴스는 보통 메서드 내부에 위치합니다.
  • 인스턴스는 변수(속성)에 값이 할당된 것이고 메서드는 기능이 부여된 것이기 때문입니다.
  • 실무적인 표현으로는 메인 메서드 중괄호 내부에 위치한 변수에 값을 할당합니다.
  • 인스턴스는 아래와 같이 구현되며 이는 아래 메서드의 구현 코드와 동일합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
public class CarMain {
    public static void main(String[] args) {

        Car car = new Car();

        car.name = "G80";
        car.company = "Genesis";
        car.price = 60000000;

        System.out.println("자동차 이름 = " + car.name + ", 제조사 = " + car.company + ", 가격 = " + car.price);

    }
}


🔔 메서드(Method)

📌 메서드 정의

  • 메서드는 클래스에 기반하여 생성된 함수이며 기능을 구현합니다.
  • 메서드는 소괄호()를 포함하며 소괄호 내에 파라미터를 입력하거나 입력하지 않습니다.
  • 실무적인 표현으로는 소괄호가 있으면 메서드이고 소괄호가 없으면 변수(속성)입니다.
  • 메서드의 예시는 Java 학습 시 자주 사용되는 println() 등입니다.
  • 메서드는 1 ~ 5개 정도의 파라미터를 가지며 그 이상이면 객체로 묶어서 처리합니다.

📌 생성자 메서드(Constructor Method)

  • 생성자 메서드는 해당 클래스의 인스턴스를 생성 및 초기화 할 때 사용됩니다.
  • 생성자 메서드는 클래스를 호출할 때 처음이자 마지막으로 단 1회 사용됩니다.
  • 생성자 메서드는 객체와 이름이 동일하며 소괄호를 포함합니다.
  • 생성자 메서드는 필요에 따라 다양하게 정의되며 변수 및 매개변수가 정의됩니다.
  • 참고로 생성자 메서드는 보통 new 키워드 우측에 위치합니다.
  • 생성된 클래스의 인스턴스에 접근하기 위해서는 변수의 이름과 점(.) 연산자를 이용해야 됩니다.

📌 메서드 구현(예시)

  • 아래 코드에는 생성자 메서드, println 메서드를 작성하였습니다.
  • 참고로 생성자 메서드에는 파라미터가 없는 상태입니다.
  • 이와는 달리 println 메서드에는 파라미터가 있는 상태입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class CarMain {
    public static void main(String[] args) {

        // new 생성자 메서드
        Car car = new Car();

        // 클래스에 점(.)으로 접근
        car.name = "G80";
        car.company = "Genesis";
        car.price = 60000000;

        // println 메서드
        System.out.println("자동차 이름 = " + car.name + ", 제조사 = " + car.company + ", 가격 = " + car.price);

    }
}


🔔 응용 학습

📌 점(.) 연산자

  • Java에서는 점으로 객체 및 클래스에 정의된 변수나 메서드에 접근할 수 있습니다.
  • 이때 객체명.변수명, 객체명.메서드명으로 사용되며 예시는 아래와 같습니다.
  • ‘car.name = “G80”‘는 car 객체에 정의된 name 변수(필드)에 값을 할당한 것입니다.

📌 Scanner 클래스

  • Scanner 클래스는 Java의 java.util 패키지에 기본적으로 포함된 클래스입니다.
  • 키보드 등 다양한 입력 소스로부터 데이터를 읽어들이는 데 사용됩니다.
  • 따라서 사용자가 소프트웨어에 접근할 수 있는 인터페이스 구현에 사용됩니다.
  • 아래는 Scanner 클래스를 구현한 것입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {

    // System.in은 키보드 입력을 의미합니다.
    Scanner scan = new Scanner(System.in);

    // 입력 안내 문구를 출력하였습니다.
    System.out.print("제품의 가격을 입력하세요.");
    // nextInt() 메서드로 숫자를 입력 받습니다.
    String price = scan.nextInt();
    // price 변수에 할당된 값을 출력합니다.
    System.out.print("제품의 가격 = " + price);

}




이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
<>