자바 : 제임스 고슬링이 만듬
자바 객제지향의 4요소
캡슐화(Encapsulation): 자바에서는 클래스(Class)를 이용하여 캡슐화를 구현합니다. 클래스는 객체를 생성하기 위한 템플릿으로, 객체의 속성(attribute)과 동작(method)을 정의합니다. 접근 제어자(Access Modifier)를 사용하여 캡슐화를 구현하며, private으로 선언된 속성과 메서드는 외부에서 직접 접근할 수 없습니다.
상속(Inheritance): 자바에서는 extends 키워드를 사용하여 상속을 구현합니다. 상속은 부모 클래스의 속성과 동작을 자식 클래스가 물려받는 것입니다. 상속을 통해 코드의 재사용성을 높이고, 유지보수성을 개선할 수 있습니다.
다형성(Polymorphism): 자바에서는 오버로딩(Overloading)과 오버라이딩(Overriding)을 사용하여 다형성을 구현합니다. 오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것으로, 매개변수의 개수나 타입을 다르게 하여 다른 기능을 수행할 수 있습니다. 오버라이딩은 상속 받은 메서드를 자식 클래스에서 다시 정의하는 것으로, 부모 클래스의 메서드와 같은 이름과 매개변수를 가지며, 동작을 다르게 할 수 있습니다.
추상화(Abstraction): 자바에서는 추상 클래스(Abstract Class)와 인터페이스(Interface)를 사용하여 추상화를 구현합니다. 추상 클래스는 일부 메서드를 구현하지 않고, 자식 클래스에서 구현하도록 강제하는 클래스입니다. 인터페이스는 구현부가 없는 추상 메서드의 집합으로, 클래스에서 인터페이스를 구현하여 해당 인터페이스의 메서드를 구현하도록 강제할 수 있습니다.
-JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신입니다. 자바는 컴파일러를 통해 소스 코드를 바이트 코드로 변환한 후, JVM에서 실행됩니다. JVM은 바이트 코드를 실제 실행 코드로 번역하고, 메모리 관리, 쓰레드 관리, 예외 처리 등의 기능을 제공합니다.
JVM은 운영체제와 독립적이기 때문에, 자바 프로그램은 어떤 운영체제에서도 동일하게 동작합니다. 이는 자바의 큰 장점 중 하나입니다. 또한, JVM은 자바 프로그램의 안정성과 보안성을 높이는 역할을 합니다. JVM은 메모리 누수, 스택 오버플로우 등의 문제를 방지하며, 보안성을 높이기 위해 바이트 코드를 검증합니다.
가비지컬렉션 : 자바에서는 가비지 컬렉션(Garbage Collection)이라는 메모리 관리 기술을 사용하여, 프로그래머가 직접 메모리를 관리하지 않아도 됩니다. 가비지 컬렉션이란, 자바 프로그램이 사용하는 메모리 중에서 더 이상 사용하지 않는 객체를 자동으로 제거하는 기능입니다.
바인딩 : 메서드나 변수를 호출할 때, 해당 메서드나 변수를 찾아 연결하는 과정을 의미합니다. 바인딩에는 정적 바인딩(Static Binding)과 동적 바인딩(Dynamic Binding)이 있습니다.
정적 바인딩(Static Binding): 정적 바인딩은 컴파일 시점에 발생하는 바인딩으로, 메서드 오버로딩(Overloading)에서 사용됩니다. 메서드 오버로딩은 같은 이름의 메서드가 여러 개 존재할 때, 매개변수의 개수나 타입에 따라 메서드를 구분하여 호출하는 것입니다. 정적 바인딩은 컴파일러가 오버로딩된 메서드 중에서 호출할 메서드를 결정합니다.
동적 바인딩(Dynamic Binding): 동적 바인딩은 실행 시점에 발생하는 바인딩으로, 메서드 오버라이딩(Overriding)에서 사용됩니다. 메서드 오버라이딩은 상속 받은 메서드를 자식 클래스에서 다시 정의하는 것입니다. 동적 바인딩은 상속 받은 메서드를 호출할 때, 메서드를 호출하는 객체의 타입에 따라 적절한 메서드를 찾아 연결합니다. => 다형성