본문 바로가기

study_IT/개발 용어 사전

[ 21 ~ 30 ] Casting, API, Call By Value, Call by Reference, Camel Case, Pascal Case, Snake Case, Refactoring, Overloading, Overriding

728x90
반응형

21. Casting

자료형 변환

사용자로부터 입력을 받아 숫자로 계산해야 하는 경우, 두 가지 다른 자료형의 데이터를 연산해야 할 때, 

데이터를 저장하거나 표시할 형식을 바꿔야 할 때 등

 

1) 암시적 캐스팅 (Implicit Casting 또는 자동 형 변환, 묵시적 형 변환)

프로그램이 자동으로 자료형을 변환

데이터의 손실이나 정밀도 손실 없음(사이즈가 작은 데이터 타입을 큰 데이터 타입으로 자동 형 변환)

   int_num = 10
   float_num = 3.14
   result = int_num + float_num  # int_num이 자동으로 부동 소수점으로 변환되어 덧셈이 이루어집니다.



2) 명시적 캐스팅 (Explicit Casting 또는 수동 형 변환)

프로그래머가 직접 자료형을 변환

데이터의 손실이나 정밀도 손실이 발생할 수 있음(사이즈가 큰 데이터 타입을 작은 데이터 타입으로 명시적 형 변환)

   float_num = 3.14
   int_num = int(float_num)  # 부동 소수점을 정수로 명시적으로 변환합니다.

 

 

22. API(Application Programming Interface)

운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식

소프트웨어 응용 프로그램 간에 상호 작용하기 위한 규칙과 규격을 정의한 인터페이스

 

1) 데이터 제공 API

외부 응용 프로그램에 데이터에 접근할 수 있는 방법을 제공. 데이터베이스, 서비스, 또는 다른 서버에서 데이터를 가져오는 데 사용될 수 있다.

2) 기능 제어 API

다른 소프트웨어의 특정 기능을 호출하고 실행할 수 있게 해준다. 파일 업로드, 메시지 전송, 지불 처리 등의 기능을 API를 통해 외부에서 호출할 수 있다.

3) 외부 서비스에 대한 액세스 API

외부 서비스와 통신하기 위한 API로, 외부 메일 서비스나 지도 서비스와 상호 작용하기 위해 사용될 수 있다.

API를 사용하면 응용 프로그램은 특정 기능을 쉽게 확장하고 외부 서비스를 활용할 수 있다. 예를 들어, 웹 애플리케이션이 결제 기능을 구현하려면 외부 결제 서비스의 결제 API를 사용하여 신용 카드 결제를 처리할 수 있다. 이렇게 하면 애플리케이션 개발자는 결제 시스템을 구축하지 않고도 결제 서비스를 사용할 수 있다.

API는 다양한 형태로 제공될 수 있다. 웹 API의 경우에는 웹 서버를 통해 HTTP 요청을 보내고 응답을 받아 사용자가 해당 서비스와 상호 작용할 수 있게 해준다. 라이브러리 내의 함수로 제공되는 API도 있고, 운영 체제 수준에서 시스템 리소스에 액세스할 수 있는 API도 있다.

23. Call By Value 

값에 의한 호출

함수에 값을 전달할 때, 그 값의 복사본이 함수로 전달되는 방식

함수 안에서 매개변수의 값을 변경해도 호출한 곳의 변수에 영향을 주지 않는다. 대부분의 기본 데이터 타입(int, float, char 등)은 이 방식으로 전달된다.

void modifyValue(int x) {
    x = x + 1;
}

int main() {
    int num = 5;
    modifyValue(num);  // num의 복사본이 modifyValue 함수에 전달됨
    // 여기에서 num은 여전히 5입니다. 함수 호출이 num에 영향을 주지 않음
    return 0;
}

 

 

24. Call by Reference

참조에 의한 호출

함수에 변수의 메모리 주소(참조)를 전달하여 변수의 직접적인 조작을 허용하는 방식

함수 안에서 매개변수의 값을 변경하면, 호출한 곳의 변수도 변경된다. 포인터나 참조자를 통해 구현될 수 있다.

void modifyValue(int &x) {
    x = x + 1;
}

int main() {
    int num = 5;
    modifyValue(num);  // num의 참조가 modifyValue 함수에 전달됨
    // 여기에서 num은 이제 6입니다. 함수 호출이 num을 직접 변경함
    return 0;
}
void modifyValue(int *x) {
    (*x) = (*x) + 1;
}

int main() {
    int num = 5;
    modifyValue(&num);  // num의 주소가 modifyValue 함수에 전달됨
    // 여기에서 num은 이제 6입니다. 함수 호출이 num을 간접적으로 변경함
    return 0;
}

 

25. Camel Case (Lower Camel Case)

단어의 중간에 띄어쓰기나 표기없이 대문자 사용 ex)iPhone, eBay

프로그래밍에서 변수, 함수, 메서드 등의 이름을 지을 때 사용되는 네이밍 컨벤션 중 하나

여러 단어로 이루어진 식별자(Identifier)의 각 단어의 첫 글자를 대문자로 표기하고, 나머지 글자는 소문자로 표기, 단어들을 이어붙일 때 단어 사이에 언더스코어(_)나 공백을 사용하지 않는다.

Camel Case는 변수명, 함수명, 메서드명 등을 작성할 때 주로 사용된다. 이 규칙은 코드의 가독성을 높이고, 변수나 함수의 역할을 더 쉽게 이해할 수 있게 도와준다.

1) 변수명
   - `totalAmount`
   - `numberOfStudents`
   - `userName`

2) 함수명 또는 메서드명
   - `calculateTotalAmount()`
   - `getUserInfo()`
   - `setNumberOfStudents(int count)`

3) 클래스명
   - `BankAccount`
   - `StudentInfo`
   - `UserProfile`

Camel Case의 이름은 첫 단어를 제외한 나머지 단어들의 시작 글자가 대문자로 되어 있어 마치 낙타의 등처럼 보이기 때문에 이러한 명명 규칙을 Camel Case라고 부른다.

 

26. Pascal Case (Upper Camel Case)

첫 단어의 첫 글자를 대문자로 표기하는 Camel Case 표기법

 

1) 첫 단어와 나머지 단어들의 시작 글자가 대문자
2) 단어들을 붙일 때 공백이나 언더스코어(_)를 사용하지 않음

Pascal Case는 자바 프로그래밍 등 대부분의 프로그래밍 언어에서 클래스명을 지을 때 사용 권장됨

- `Car`
- `StudentInfo`
- `BankAccount`

27. Snake Case

여러 단어로 이루어진 식별자를 표기할 때 단어 사이에 언더스코어(`_`)를 사용하여 이어붙임

모든 글자는 소문자로 표기

- 변수명: `total_count`, `user_name`, `first_name`
- 함수명: `calculate_total_amount()`, `get_user_info()`, `set_number_of_students(int count)`
- 파일명: `my_script.py`, `data_processing_module.rb`, `user_data_service.java`

Snake Case는 각 언어의 커뮤니티나 프로젝트에서 사용되는 네이밍 규칙 중 하나로, 대표적으로 Python과 Ruby에서 많이 사용된다. 각 언어나 프로젝트에서는 Camel Case, Snake Case, Kebab Case 등 다양한 네이밍 규칙을 채택할 수 있으며, 코드의 일관성을 유지하기 위해 해당 프로젝트의 규칙을 따라야 한다.

(Kebab Case : 모든 글자를 소문자로 쓰며, 단어 사이는 하이픈(`-`)으로 구분)

 

28. Refactoring

결과의 변경 없이 코드의 구조를 재조정함(가독성, 유지보수)
소프트웨어 개발에서 코드를 개선하고 재구성하는 과정. 기존의 코드를 변경하지 않고도 코드의 가독성, 유지보수성, 성능 등을 향상시키는 기법을 적용하여 코드를 재조정하는 과정

리팩토링의 목적
1) 가독성 향상

2) 유지보수성 향상
3) 유연성 증가
4) 성능 최적화

리팩토링은 주로 코드 중복을 제거하고, 복잡한 코드를 간소화하며, 긴 함수를 분리하고, 잘못된 데이터 구조를 수정하고, 이름을 명확하게 바꾸는 등의 작업을 포함한다. 리팩토링을 통해 코드베이스는 기존 기능을 변경하지 않으면서도 더 나은 품질의 코드로 변화할 수 있다.

29. 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 String concatenate(String str1, String str2) {
        return str1 + str2;
    }

    // 정수형 세 개를 더하는 메서드 (오버로딩)
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 오버로딩된 메서드를 호출하는 예시
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        
        int sum1 = calculator.add(5, 10); // 첫 번째 add 메서드 호출
        System.out.println("Sum1: " + sum1); // 출력: Sum1: 15

        double sum2 = calculator.add(3.5, 7.2); // 두 번째 add 메서드 호출
        System.out.println("Sum2: " + sum2); // 출력: Sum2: 10.7

        String result = calculator.concatenate("Hello, ", "World!"); // concatenate 메서드 호출
        System.out.println("Concatenated String: " + result); // 출력: Concatenated String: Hello, World!

        int sum3 = calculator.add(2, 4, 6); // 세 번째 add 메서드 호출
        System.out.println("Sum3: " + sum3); // 출력: Sum3: 12
    }
}

 

위 예시에서 `Calculator` 클래스는 `add` 메서드를 여러 버전으로 오버로딩하고 있다. 이렇게 하면 메서드의 이름을 기준으로 호출하고자 하는 메서드를 선택할 수 있다. 오버로딩을 사용하면 같은 기능을 하는 메서드들을 일관된 이름으로 정의할 수 있어 코드의 가독성과 유지보수성을 향상시킬 수 있다.

 

30. Overriding

객체 지향 프로그래밍에서 부모 클래스의 메서드를 자식 클래스에서 재정의(구현)하는 것으로, 자식 클래스는 부모 클래스로부터 상속받은 메서드를 자신의 필요에 맞게 수정하여 사용할 수 있다. 오버라이딩은 다형성(polymorphism)의 한 예시로, 같은 메서드 호출에 대해 다양한 동작을 구현할 수 있도록 한다.

 

Java에서 오버라이딩 규칙
1) 자식 클래스에서 오버라이드하려는 메서드는 부모 클래스에서 선언되어야 한다.
2) 메서드 이름, 매개변수 리스트, 반환 타입이 동일해야 한다.

    (선언부가 부모클래스의 메서드와 일치해야 한다.)

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

class Dog extends Animal {
    // 부모 클래스의 sound 메서드를 오버라이드
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    // 부모 클래스의 sound 메서드를 오버라이드
    @Override
    void sound() {
        System.out.println("Cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.sound(); // 출력: Dog barks
        animal2.sound(); // 출력: Cat meows
    }
}

 

위 예시에서 `Animal` 클래스에는 `sound` 메서드가 정의되어 있다. 이 메서드는 `Dog` 클래스와 `Cat` 클래스에서 오버라이딩되어 각 클래스의 동물이 하는 소리로 재정의되었고, `sound` 메서드 호출 결과는 실제 객체의 타입에 따라 다르게 동작한다.

728x90
반응형