2023.10.10 - CS TIL

mjjin·2023년 10월 10일
0
post-thumbnail

오늘의 CS 지식

Q1. Call by reference란 무엇이고 보통 어떻게 쓰이나요?

자바에서 참조 호출:

Java에서 기본 데이터 타입(primitives)은 Call by Value로 전달된다. 하지만 객체는 참조(reference)로 전달되기 때문에 함수 내에서 해당 객체의 멤버를 수정하면 원래 객체도 함께 변경된다.
예제 (Java):

class MyList {
    ArrayList<Integer> list = new ArrayList<>();

    public void add(int value) {
        list.add(value);
    }

    public void printList() {
        System.out.println(list);
    }
}

public class TestReference {
    public static void modifyList(MyList myList) {
        myList.add(100);
    }

    public static void main(String[] args) {
        MyList myList = new MyList();
        myList.add(1);
        myList.add(2);
        myList.add(3);

        modifyList(myList);
        myList.printList();  // 출력: [1, 2, 3, 100]
    }
}

해당 예제에서 MyList 클래스의 객체 myList를 modifyList 함수에 전달하면, 함수 내의 myList 매개변수는 원본 myList 객체의 참조를 받고, 따라서 함수 내에서 해당 객체를 수정하면 원본 myList 객체도 함께 수정된다.

Q2. Override 와 Overload 를 설명해주실 수 있을까요?

Override (오버라이드):

상속 관계에 있는 클래스들 사이에서 동일한 이름의 메서드를 재정의하는 것을 의미한다.
자식 클래스에서 부모 클래스의 메서드를 자신의 필요에 맞게 변경하여 사용할 때 사용되며
메서드의 시그니처(이름, 매개변수 타입 및 수)는 동일해야 한다.
예제 (Java):

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

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

Overload (오버로드):

동일한 클래스 내에서 메서드 이름은 동일하지만 매개변수의 타입, 수, 순서가 다른 여러 버전의 메서드를 정의하는 것을 의미한다.
같은 기능을 하는 메서드에 대해 다양한 입력 형태를 제공할 수 있다.

예제 (Java):

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

이 예제에서 Calculator 클래스는 add라는 메서드를 오버로드하여 여러 버전을 제공하고 있다.

0개의 댓글