본문 바로가기
IT개발/Java

[Java]내가 생각하는 중요한 자바 용어 정리

by Thompson 2024. 9. 28.
728x90

 

객체 지향 프로그래밍(OOP: Object Oriented Progamming)

현실에 존재하는 여러 요소, 부품들을 객체들로 먼저 만들고 이를 하나씩 조립해서 전체 프로그램을 만드는 기법.

 

컴파일

 

컴퓨터가 이해할 수 있는 0과 1로 이루어진 기계어로 변환하는 과정..

 

JVM(java virtual machine)

 

자바 프로그램의 "바이트 코드"들을 해석하고 실행할 수 있도록 해주는 "가상의 운영체제"

<JVM영역>

1. 힙 영역 : 객체와 배열이 생성되는 곳.

2. 메서드 영역 : 클래스들을 "클래스 로더"로 읽어 필드, 메서드, 생성자들을 저장. 

3. 스택 영역 : "스레드"가 생성될 때마다 해당 영역을 할당.

 

디버깅(debuging)

테스트 실행을 하여 코드의 오류를 찾는 행위.

 

로컬 변수

 

메서드 내에서 선언할 수 있는 변수로 메서드 실행이 끝나면 해당 변수는 메모리에서 자동으로 없어진다.

 

변수(variable), 상수(literal)

 

변수 : 하나의 값만 저장하며 변수할 수 있는 값이며 메모리의 공간을 할당받음.

상수 : 사용자가 직접 정의한 값으로 한 번 저장하면 변하지 않는 값으로 사용.

 

인스턴스(instance)

 

객체로 부터 만들어진 객체.

 

생성자(contructor)

new연산자에 의해서 생성되는 메서드 블록으로, 객체를 초기화하는 역할을 담당.

예를들어 필드 초기화해서 초기 값 지정 가능.

 

싱글톤(sigleton)

 

"하나의 클래스"에서 "단 하나의 객체"만을 만들도록 보장해야하는 경우에 해당.

클래스 외부에서 new연산자를 통해서 생성하지 못하게 막아야하며, 

필드에 자기 자신의 객체를 static으로 선언하고,

생성자 앞에는 private접근 제한자를 붙인다.

package testProgramming;

public class Singleton {
    public static void main(String[] args) {
        // 두 번 호출해도 같은 인스턴스를 반환
        Singleton instance1 = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();

        instance1.showMessage();  // Hello from Singleton!

		System.out.println(instance1 == instance2);  // true
    }

    private static Singleton instance;

    private Singleton() {
        System.out.println("Singleton instance created");
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();  // 인스턴스가 없을 때만 생성
        }
        return instance;
    }

    public void showMessage() {
        System.out.println("Hello from Singleton!");
    }
}

 

형식 매개변수, 실 매개변수

 

형식 매개변수 : "호출하는 함수"에 위치하는 매개변수.

실 매개변수 : "피 호출함수"에 위치하는 매개변수.

 

오버로딩(overloading)

 

생성자 오버로딩 : 매개 변수를 달리하는 생성자를 여러개 생성하는 것.

메서드 오버로딩 : 클래스 내에 같은 이름의 메서드를 여러 개 생성하는 것.(갯수, 타입, 순서가 하나라고 달라야함.)

 

상속(Inheritance)

 

"상위객체"를 기반으로 "하위객체"를 생성하는 관계를 말함.

 

오버라이딩(Overriding)

부모에게서 상속받은 "메서드의 내용"을 자식 클래스에서 "동일한 메서드"를 "재정의"하는 것.

 

다형성(polymorphism)

 

"하나의 문장으로 여러 문장을 실행 시킬 수 있는 성질을 말한다."

코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.

interface Database {
    void connect();
    void disconnect();
}

class MySQLDatabase implements Database {
    @Override
    public void connect() {
        System.out.println("Connecting to MySQL Database...");
    }

    @Override
    public void disconnect() {
        System.out.println("Disconnecting from MySQL Database...");
    }
}

class PostgreSQLDatabase implements Database {
    @Override
    public void connect() {
        System.out.println("Connecting to PostgreSQL Database...");
    }

    @Override
    public void disconnect() {
        System.out.println("Disconnecting from PostgreSQL Database...");
    }
}

public class DatabaseManager {
    // 다형성으로 여러 종류의 데이터베이스를 처리
    public static void manageDatabase(Database db) {
        db.connect();
        db.disconnect();
    }

    public static void main(String[] args) {
        Database mysql = new MySQLDatabase();
        Database postgres = new PostgreSQLDatabase();

        // 같은 인터페이스를 구현했기 때문에 같은 방식으로 처리 가능
        manageDatabase(mysql);  // MySQL 연결
        manageDatabase(postgres);  // PostgreSQL 연결
    }
}

 

추상 클래스(abstract class)

"실체 클래스"가 공통적으로 가져야 할 "필드"와 "메서드"를 정의해 놓은 추상적인 클래스.(이를 재정의 해서 사용 필수!!!!!)

 

 

추상 메서드(abstact Methond)

 

"하위 클래스"가 반드시 "오버라이딩" 하고 싶은 경우 사용하는 메서드로,

메서드 "선언 부분"만 있고 실행 내용인 "중괄호"가 없다. 

 

인터페이스(Interface)

 

객체의 사용방법을 정의하는 타입으로, 객체와 개발코드의 통신을 해주는 중간 역할을 담당.

개발 코드가 인터페이스의 메서드를 호출하면, 인터페이스를 재정의한 동일한 객체의 메서드를 호출한다.

그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메서드만 알고 있으면 된다.

 

예외 처리(exceptioni handling)

 

프로그램이 처리되는 동안 특정한 문제가 일어났을 때 처리를 중단하고 다른 처리를 하는 것. 이를 예외라고 부르는 오류를 처리하는 과정을 말함.

 

일반 예외(Checked Exception) : "컴파일러 체크 예외"라고도 한다. 만약 예외 처리 코드가 없다면 컴파일 오류가 발생. 일반 예외는 "Exception"을 상속받지만 "Runtime Exception"은 상속받지 않는다.

즉, 반드시 "try-catch 블록"으로 처리하거나 "throws 키워드"를 통해 호출한 메서드로 예외를 전달해야 합니다.

import java.io.*;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        // 파일 읽기 작업에서 발생할 수 있는 일반 예외 처리
        try {
            FileReader reader = new FileReader("nonexistent_file.txt");
            BufferedReader bufferedReader = new BufferedReader(reader);
            
            String line = bufferedReader.readLine();
            System.out.println(line);
            
            bufferedReader.close();
        } catch (FileNotFoundException e) {
            System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("입출력 오류 발생: " + e.getMessage());
        }
    }
}

 

실행 예외(UnChecked Exception) : 런타임에서 발생하며, 컴파일러가 예외 처리를 강제하지 않습니다. "RuntimeException"을 상속하는 클래스들이 이에 속하며, 주로 프로그래밍 오류나 논리적인 문제로 발생하는 예외들입니다. 예를 들어, 배열 인덱스 범위를 벗어났을 때 발생하는 "ArrayIndexOutOfBoundsException"이 이에 해당합니다.

public class UncheckedExceptionExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};

        // 배열의 인덱스 범위를 벗어나서 예외 발생
        try {
            System.out.println(numbers[3]);  // ArrayIndexOutOfBoundsException 발생
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("배열 인덱스를 벗어났습니다: " + e.getMessage());
        }

        // 다른 실행 예외 예시 (ArithmeticException)
        try {
            int result = 10 / 0;  // ArithmeticException 발생
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
        }
    }
}

 

API(application progamming interface)

 

프로그램을 개발에 자주 사용되는 클래스 및 인터페이스의 모음으로 "라이브러리"라고도 부른다.

 

스레드(thread)

 

하나의 스레드는 하나의 실행 흐름이기 때문에 한 프로세스 내에서 스레드가 두 개라면 두 개의 코드 실행 흐름이 생긴다는 의미.(하나의 스레드는 순차적으로 실행하는 코드의 흐름을 말함.)

 

멀티 스레드(Multi Thread)

 

멀티 스레드는 "동시성" 또는 "병렬성"으로 실행된다. 

동시성 : 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아 실행하는 성질.

병렬성 : 멀티 작업을 위해 멀티 코어에서 개별 스레드로 동시에 실행하는 성질.

 

버퍼(buffer)

 

데이터를 한 곳에서 다른 한 곳으로 전송하는 동안

(일시적으로 그 데이터를 보관하는 메모리의 공간, 임시 저장 장치, 큐의 형태로 저장되는 공간)

 

유니코드, 아스키코드

 

유니코드 : 전세계의 문자를 표현할 수 있도록 설계된 코드.

아스키 코드 : 7비트로 영문자 기반의 인코딩.