2025/02/02: 3개의 글

[Java] 자바에서 오버로드와 오버라이드

Posted by nkjok
2025. 2. 2. 16:09 낙서장[1]/91. Java
반응형

자바에서 오버로드와 오버라이드

자바의 중요한 개념인 오버로드(Overload)와 오버라이드(Override)에 대해, 이 두 개념은 객체 지향 프로그래밍에서 자주 등장하는 개념으로, 메서드의 재사용성과 다형성을 구현하는 데 중요한 역할을 한다. 그럼, 오버로드와 오버라이드의 차이점과 예시를 통해 살펴보겠다

오버로드 (Overloading)

오버로드는 동일한 이름을 가진 메서드를 여러 개 정의하되, 매개변수의 타입, 수, 순서가 다르게 정의하는 것을 의미한다.

특징:

  • 매개변수의 타입, 수, 순서가 다르다.
  • 반환 타입은 오버로드에 영향을 미치지 않는다.
  • 동일한 클래스 내에 존재하거나 상속받은 클래스 내에 존재할 수 있다.

예시:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
   
    public double add(double a, double b) {
        return a + b;
    }
   
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

위의 예제에서 Calculator 클래스는 세 가지 add 메서드를 정의하고 있으며, 각 메서드는 매개변수의 타입이나 수가 다르다.

오버라이드 (Overriding)

오버라이드는 상위 클래스에 정의된 메서드를 하위 클래스에서 동일한 매개변수와 반환 타입으로 재정의하는 것을 의미한다.

특징:

  • 매개변수와 반환 타입이 동일하다.
  • 하위 클래스에서 상위 클래스의 메서드를 덮어쓴다.
  • @Override 애노테이션을 사용하여 컴파일러에게 재정의 의도를 명확히 할 수 있다.

예시:

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        super.sound(); // 상위 클래스의 sound 메서드를 호출한다.
        System.out.println("Dog barks");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스의 sound 메서드를 동일한 시그니처로 재정의하고 있으며, super 키워드를 사용하여 상위 클래스의 sound 메서드를 호출한 후 추가 동작을 정의한다.

오버로드와 오버라이드 사용 예시

오버로드 사용하는 경우:

  • 동일한 동작을 수행하지만 매개변수가 다른 여러 형태의 메서드를 정의할 때 사용한다.
  • 예를 들어, 다양한 데이터 타입을 처리하는 add 메서드를 정의할 때 사용한다.

오버라이드 사용하는 경우:

  • 상위 클래스의 기본 메서드 동작을 하위 클래스에서 변경하고 싶을 때 사용한다.
  • 예를 들어, 동물 소리를 내는 sound 메서드를 각 동물 클래스에서 구체화할 때 사용한다.

 

 

오버로드와 오버라이드는 자바에서 메서드의 재사용성과 다형성을 구현하는 중요한 개념이다. 오버로드는 매개변수를 다르게 하여 같은 이름의 메서드를 여러 개 정의하는 것이고, 오버라이드는 상위 클래스의 메서드를 하위 클래스에서 동일한 시그니처로 재정의하는 것이다. 이 두 개념을 잘 이해하고 사용하면 더 유연하고 유지보수하기 쉬운 코드를 작성할 수 있다고한다

반응형

[Java] 자바기초, (멤버, 생성자 등)

Posted by nkjok
2025. 2. 2. 13:31 낙서장[1]/91. Java
반응형

자바에서 멤버 함수(메서드)는 클래스 내에 정의된 함수로, 객체의 동작을 정의하는 데 사용된다. 멤버 함수는 객체의 상태를 변경하거나 객체의 데이터를 처리하는 역할을 한다. 예를 들어, 아래의 코드는 간단한 Person 클래스를 정의하고 멤버 함수(메서드)를 포함하고 있다:


public class Person {
    // 멤버 변수 (필드)
    private String name;
    private int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 멤버 함수 (메서드)
    public void displayInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }

    // Getter 메서드
    public String getName() {
        return name;
    }

    // Setter 메서드
    public void setName(String name) {
        this.name = name;
    }

    // Getter 메서드
    public int getAge() {
        return age;
    }

    // Setter 메서드
    public void setAge(int age) {
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        // Person 객체 생성
        Person person = new Person("John", 30);

        // 멤버 함수 호출
        person.displayInfo();

        // Getter 메서드 호출
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());

        // Setter 메서드 호출
        person.setName("Alice");
        person.setAge(25);

        // 변경된 정보 출력
        person.displayInfo();
    }
}
 

위의 예시에서:

  • Person 클래스는 두 개의 멤버 변수(name, age)를 가지고 있다.
  • 생성자는 Person 객체가 생성될 때 호출되며, name과 age를 초기화한다.
  • displayInfo 메서드는 Person 객체의 정보를 출력하는 멤버 함수이다.
  • getName, setName, getAge, setAge 메서드는 각각 name과 age를 가져오고 설정하는 역할을 한다.

이처럼 멤버 함수는 객체의 동작을 정의하고, 객체의 상태를 변경하거나 데이터를 처리하는 데 사용된다. 


public class Person {
    // 멤버 변수 (필드)
    private String name; // 'name'이라는 private 필드를 선언한다.
    private int age;     // 'age'라는 private 필드를 선언한다.

    // 생성자
    public Person(String name, int age) { // 'name'과 'age'를 매개변수로 받는 생성자를 정의한다.
        this.name = name; // 전달된 'name' 매개변수를 'this.name'에 저장한다.
        this.age = age;   // 전달된 'age' 매개변수를 'this.age'에 저장한다.
    }

    // 멤버 함수 (메서드)
    public void displayInfo() { // 'displayInfo'라는 멤버 함수를 정의한다.
        System.out.println("Name: " + name); // 'name' 필드를 출력한다.
        System.out.println("Age: " + age);   // 'age' 필드를 출력한다.
    }

    // Getter 메서드
    public String getName() { // 'name' 필드를 반환하는 'getName' 메서드를 정의한다.
        return name; // 'name' 필드를 반환한다.
    }

    // Setter 메서드
    public void setName(String name) { // 'name' 필드를 설정하는 'setName' 메서드를 정의한다.
        this.name = name; // 전달된 'name' 매개변수를 'this.name'에 저장한다.
    }

    // Getter 메서드
    public int getAge() { // 'age' 필드를 반환하는 'getAge' 메서드를 정의한다.
        return age; // 'age' 필드를 반환한다.
    }

    // Setter 메서드
    public void setAge(int age) { // 'age' 필드를 설정하는 'setAge' 메서드를 정의한다.
        this.age = age; // 전달된 'age' 매개변수를 'this.age'에 저장한다.
    }
}

public class Main {
    public static void main(String[] args) { // 메인 메서드를 정의한다.
        // Person 객체 생성
        Person person = new Person("John", 30); // 'John'과 30을 매개변수로 하여 'Person' 객체를 생성한다.

        // 멤버 함수 호출
        person.displayInfo(); // 'displayInfo' 메서드를 호출하여 'John'과 30을 출력한다.

        // Getter 메서드 호출
        System.out.println("Name: " + person.getName()); // 'getName' 메서드를 호출하여 'name'을 출력한다.
        System.out.println("Age: " + person.getAge());   // 'getAge' 메서드를 호출하여 'age'를 출력한다.

        // Setter 메서드 호출
        person.setName("Alice"); // 'setName' 메서드를 호출하여 'name'을 'Alice'로 변경한다.
        person.setAge(25);       // 'setAge' 메서드를 호출하여 'age'를 25로 변경한다.

        // 변경된 정보 출력
        person.displayInfo(); // 'displayInfo' 메서드를 다시 호출하여 'Alice'와 25를 출력한다.
    }
}
 
반응형

[Java] 자바 접근 지정자 이해하기

Posted by nkjok
2025. 2. 2. 13:05 낙서장[1]/91. Java
반응형

접근지정자


자바 접근 지정자 이해하기

자바에서 중요한 개념인 접근 지정자에 대해 알아보려고 한다. 특히, 클래스와 객체 지향 프로그래밍을 다룰 때 꼭 이해해야 할 내용이다. 자바 접근 지정자의 종류와 각각의 특징을 설명한다.

1. 접근 지정자의 종류

자바에는 네 가지 주요 접근 지정자가 있다. 각 접근 지정자는 클래스, 메서드, 필드 등이 다른 클래스에서 어떻게 접근 가능한지를 결정한다.

  1. private: 동일 클래스 내에서만 접근 가능하다.
  2. default: 동일 패키지 내에서 접근 가능하다.
  3. protected: 동일 패키지 내에서 접근 가능하며, 다른 패키지의 하위 클래스에서도 접근 가능하다.
  4. public: 모든 클래스에서 접근 가능하다.

2. 접근 지정자의 사용 예시

  • private: 'class AA'의 private 멤버는 'class AA' 내에서만 접근 가능하다. 다른 클래스나 패키지에서는 접근이 불가능하다.
  • default: 'class AA'의 default 멤버는 같은 패키지 내의 다른 클래스에서는 접근 가능하지만, 다른 패키지에서는 접근이 불가능하다.
  • protected: 'class AA'의 protected 멤버는 같은 패키지 내의 다른 클래스뿐만 아니라, 다른 패키지의 하위 클래스에서도 접근 가능하다.
  • public: 'class AA'의 public 멤버는 모든 클래스에서 접근 가능하다.

3. 패키지 구조 설명

사진에는 두 개의 패키지(Package A와 Package B)가 있다. 각 패키지에는 여러 클래스가 포함되어 있다. 예를 들어, Package A에는 'class AB', 'class AA', 'class AAC'가 있고, Package B에는 'class BB'와 'class AAB'가 있다. 'class AAC'와 'class AAB'는 'class AA'를 상속받는다.

 

 

자바의 접근 지정자는 코드의 가독성과 유지보수성을 높이는 데 중요한 역할을 한다. 접근 지정자를 적절히 사용하면, 코드의 보안성과 무결성을 유지하면서도 필요한 부분에서만 접근을 허용할 수 있다. 

반응형