클래스(Class)

서린·2024년 7월 24일
0
post-thumbnail

클래스(Class)란?

  • 객체를 정의하기 위한 집합
  • 객체란 실제로 존재하는 사물 또는 개념으로, 프로그래밍에서는 사용되는 데이터 또는 식별자(identifier)에 의해 참조되는 공간을 뜻한다.
  • 클래스 명의 첫글자는 대문자로 작성
  • 기본적으로 한 시스템 내에서 클래스명은 중복되면 안된다.
  • class는 크게 필드(field)메소드(Method)로 구성

인스턴스(Instance) 생성 및 사용

  • 인스턴스화(Instantiate)
    • 작성한 class를 사용하기 위해 객체로 만드는 과정

    • 일반적으로 인스턴스화를 통해 객체를 생성하고, 변수에 저장 후 사용

      public class HelloJava {
          public static void main(String[] args) {
      		    // Method Class 인스턴스화
              Method Method = new Method();
              
              // 이후 변수 Method를 이용하여 사용
              System.out.println(Method.add(2, 3));
          }
      }
      
      class Method {
          public int add(int a, int b) {
              return a + b;
          }
      }

필드(field)

  • class내에 정의 된 변수(variable)
  • 선언된 위치에 따라 아래와 같이 구분
    • 클래스 변수(static variable)
      static 키워드를 가지는 변수로 모든 인스턴스가 공통된 저장공간을 공유
      프로그램이 종료될 때 소멸
    • 인스턴스 변수(instance variable)
      클래스가 생성 될때마다 생성되는 변수로 인스턴스마다 저장공간이 다르다.
      인스턴스가 소멸할 때 소멸
    • 지역 변수(local variable)
      메소드 내에 생성된 변수
      메소드가 종료되면 소멸
// 예)
class While {
    public String gender; // 인스턴스 변수
    public static String name; // 클래스 변수

		// 메소드
    public void swimming() {
		    String swimm = "헤엄칩니다."; // 지역 변수
        System.out.println(swimm);
    }
}

메소드(Method)

  • class 내에 정의 된 함수
  • static 키워드 여부에 따라 아래와 같이 구분
    • 스태틱 메소드
      static 키워드를 가진 메소드
      클래스 메소드 내부에서 인스턴스 변수를 사용할 수 없으므로 주의
      프로그램이 종료될 때 소멸
    • 인스턴스 메소드
      static 키워드가 없는 메소드
      인스턴스가 소멸될 때 소멸
// 메소드의 기본 형태
// 접근제어지시자 리턴타입 메소드명([파라미터1, 파라미터2...]) {
		// 기능 작성
}

// 예)
public class HelloJava {
    public static void main(String[] args) {
        // 스태틱 메소드는 인스턴스 없이 사용 가능
        System.out.println(Method.addStatic(5, 3));

        // 인스턴스 메소드는 class의 인스턴스를 생성 후 사용 가능
        Method Method = new Method();
        System.out.println(Method.add(2, 3));
    }
}

class Method {
    // 스태틱 메소드
    public static int addStatic(int a, int b) {
        return a + b;
    }

    // 인스턴스 메소드
    public int add(int a, int b) {
        return a + b;
    }
}

매개변수(Parameter)와 인수(Argument)

  • 인수(Argument)
    메소드를 호출할 때 전달 되는 값
  • 매개변수(Parameter)
    메소드의 정의에서 전달 받은 인수(Argument)를 저장하는 변수
public class HelloJava {
    public static void main(String[] args) {
        int num1 = 5;
        int num2 = 6;

				// HelloJava.sum() 호출시 사용한 num1과 num2는 Argument
        System.out.println(HelloJava.sum(num1, num2));
    }

		// HelloJava.sum() 정의에서 사용한 int a와 int b는 Parameter
    public static int sum(int a, int b) {
        return a + b;
    }
}

접근 제어 지시자(Access Modifier)

  • 외부에서의 접근을 통제하기위해 필드나 메소드 앞에 작성
    • public
      class 내외부 어디에서나 접근 가능
    • protected
      같은 패키지 또는 class 내부, 자식클래스에서 접근 가능
    • default
      같은 패키지에 소속된 클래스에서 접근 가능
    • private
      class 내부에서만 접근 가능
class Method {
    public int num1; // 어디에서나 접근 가능
    protected int num2;// 클래스 내부 && 상속 관계에서 접근 가능
    int num3; // 같은 패키지에 소속된 클래스에서 접근 가능
    private int num4; // 클래스 내부에서만 접근 가능

    public void method1() {
        System.out.println("Public Method");
    }
    protected void method2() {
        System.out.println("Protected Method");
    }
    void method3() {
        System.out.println("Protected Method");
    }
    private void method4() {
        System.out.println("Private Method");
    }
}

오버로딩(overloading)

  • 메소드 시그니처(method signature)가 다르나 동일한 이름을 가지는 메소드를 중복하여 정의
    - 메소드 시그니처(method signature)
    메소드 선언부에 명싱되는 파라미터 리스트
  • 오버로딩은 리턴 타입과는 관계가 없다.
  • 대표적인 오버로딩의 예는 System.out.println()
// println 호출
System.out.println(1); // 파라미터가 정수 타입으로 메소드 호출
System.out.println(3.157); // 파라미터가 실수 타입으로 메소드 호출
System.out.println("안녕"); // 파라미터가 문자열 타입으로 메소드 호출
System.out.println(true); // 파라미터가 논리 타입으로 메소드 호출

// println 메소드 정의
public static void println() { ... }
public static void println(boolean x) { ... }
public static void println(char x) { ... }
public static void println(char[] x) { ... }
public static void println(double x) { ... }
public static void println(float x) { ... }
public static void println(int x) { ... }
public static void println(long x) { ... }
public static void println(Object x) { ... }
public static void println(String x) { ... }

생성자(Construct)

  • 클래스를 인스턴스화할 때, 딱 한번 실행되는 메소드
  • 주로 객체의 초기화 또는 인스턴스 생성시 실행 되어야 하는 작업을 위해 사용하는 특수한 메소드
  • 개발자가 생성자 메소드를 생성하지 않을 경우 기본 생성자(Default Constructor)가 실행
    class Test {
        // 기본 생성자
        public Test() {}
    }
  • 생성자도 파라미터를 선언하여 호출 시 값을 전달 받고, 인스턴스 초기화 작업에 사용
    class Test {
        public int age;
        
        // 파라미터가 있는 생성자
        public Test(int age) {
            this.age = age; // 파라미터 age를 필드 age에 저장
        }
    }

this() 메소드와 this 참조 변수

  • this() 메소드
    같은 클래스의 다른 생성자를 호출할 때 사용
  • this() 메소드에 아규먼트를 전달하면 정의되어 있는 생성자를 찾아 호출
    생성자 내부에서만 사용 가능
    반드시 해당 생성자의 가장 첫 줄에서만 this()메소드 사용 가능
    this 참조 변수
    클래스 자기 자신을 뜻하는 키워드
    this 참조 변수는 해당 인스턴스의 주소를 가리키고 있다.
    모든 인스턴스 메소드에서는 this 참조 변수 사용 가능
    스태틱 메소드는 this 참조 변수 사용 불가
class Drone {
    public int hp; // 체력
    public int damage; // 공격력
    public int armor; // 방어력

    public Drone() {
        // 기본 생성자의 경우, 고정값으로 `Drone(int hp, int damage, int armor)`생성자 호출
        this(40, 5, 0);
    }

    public Drone(int hp, int armor) {
        // hp와 armor는 파라마터 값으로, damage는 고정 값으로 `Drone(int hp, int damage, int armor)`생성자 호출
        this(hp, 5, armor);
    }

    public Drone(int hp, int damage, int armor) {
        // 파라미터로 넘겨 받은 값으로 필드 초기화
        this.hp = hp;
        this.damage = damage;
        this.armor = armor;
    }
}
profile
개발 일기 ( •̀ ω •́ )✧

0개의 댓글

관련 채용 정보