Java에서 객체란?
- 자바에서 객체는 클래스의 인스턴스(instance).
- 클래스는 객체를 생성하기 위한 설계도 또는 틀
- 속성과 메서드를 정의하며, 객체의 상태를 정의하는 필드를 포함
- 객체는 이 설계도를 바탕으로 만들어진 실제 데이터와 상태를 가짐
- 객체는 클래스에서 정의한 속성(필드)과 행동(메서드)을 가질 수 있음
- 예를 들어, Car 클래스가 있다면, Car 객체는 색상, 모델, 연료 종류 등의 속성을 가지며, 주행, 정지 등의 행동을 수행
Java에서 바이트코드란?
- 자바 바이트코드는 자바 소스 코드가 컴파일된 후 생성되는 중간 코드.
- 자바 컴파일러는 자바 소스 코드를 .class 파일로 변환하는데, 이 파일은 바이트코드를 포함하고 있음.
- 자바 바이트코드는 자바 가상 머신(JVM)에서 실행되며, 이로 인해 자바는 플랫폼 독립성을 가짐. 즉, 동일한 바이트코드가 다양한 플랫폼에서 실행될 수 있음
플랫폼 독립성?
- 소프트웨어나 프로그램이 특정 하드웨어나 운영 체제에 종속되지 않고, 다양한 플랫폼에서 동일하게 실행될 수 있는 능력을 의미
바이트코드와 기계어의 차이?
- 바이트코드
- 고수준 언어(자바)에서 생성된 중간 코드로, JVM에서 실행됩니다. 플랫폼 독립적이며, 다양한 운영 체제에서 실행될 수 있습니다.
- 기계어
- 특정 하드웨어에서 실행되는 저수준 언어입니다. CPU가 직접 이해하고 실행할 수 있는 형태로, 플랫폼에 종속적입니다.
C++ Java (객체지향언어) 차이점
- C++, Java 2가지 모두 객체지향언어
- 메모리 관리
- C++는 프로그래머가 메모리를 수동으로 관리해야 하지만, Java는 JVM의 가비지 컬렉션을 통해 자동으로 메모리를 관리
- 포인터
- C++는 포인터를 지원하지만, Java는 포인터를 사용하지 않고 대신 참조를 사용
- 다중 상속
- C++는 다중 상속을 지원하지만, Java는 인터페이스를 통해 다중 상속을 구현할 수 있음
- 성능
- C++는 컴파일된 언어로, 성능이 뛰어나지만, Java는 바이트코드로 컴파일되어 JVM에서 실행되므로 상대적으로 느릴 수 있음
객체 지향 프로그래밍의 4대 원칙
- 캡슐화(Encapsulation)
- 데이터를 보호하고, 데이터에 접근하는 방법을 제한하여 객체의 내부 상태를 숨기는 원칙
- 상속(Inheritance)
- 기존 클래스의 속성과 메서드를 재사용하여 새로운 클래스를 만드는 원칙입니다. 이를 통해 코드의 중복을 줄이고 유지보수를 용이
- 다형성(Polymorphism)
- 동일한 인터페이스를 통해 여러 형태의 객체를 사용할 수 있는 능력입니다. 메서드 오버로딩과 오버라이딩을 통해 구현
- 추상화(Abstraction)
- 복잡한 시스템의 세부사항을 숨기고, 필요한 부분만을 노출하여 사용자가 쉽게 이해하고 사용할 수 있도록 하는 원칙
기본 데이터 타입과 참조 데이터 타입의 차이
- 기본 데이터 타입은 메모리에 직접 값을 저장하며, int, char, boolean, float, double 등이 있음
- 참조 데이터 타입은 객체의 주소를 저장하며, 배열, 클래스, 인터페이스 등이 포함
- 참조 데이터 타입은 객체를 생성하여 사용할 때 메모리에서 더 많은 공간을 차지할 수 있습
상속, super() 키워드
- 상속은 한 클래스가 다른 클래스로부터 속성과 메서드를 물려받는 개념
- super 키워드는 부모 클래스의 생성자나 메서드에 접근하기 위해 사용
- 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출할 때 super()를 사용
collection (List, Set, Map)
- List는 순서가 있는 데이터의 집합으로, 중복을 허용 ex) ArrayList.
- Set은 중복을 허용하지 않는 데이터의 집합, 순서가 보장되지 않음
- Map은 키-값 쌍으로 데이터를 저장하며, 키는 중복을 허용하지 않음 ex) HashMap