0. 들어가며객체지향 프로그래밍을 하다 보면 반드시 마주치는 개념이 바로 오버라이딩(Overriding)과 오버로딩(Overloading)이다.두 개념은 이름은 비슷하지만, 의미도 다르고 쓰임새도 완전히 다르다.이번 글에서는 그 차이를 기술적인 관점에서 명확하게 정리해보자. 1. 오버라이딩 (Overriding)오버라이딩은 "상속 관계에서 부모 클래스의 메서드를 재정의하는 것"이다.즉, 자식 클래스가 부모로부터 상속받은 메서드를 동일한 시그니처로 다시 구현하여 동작을 바꾸는 것이다. 조건 메서드 이름, 매개변수, 리턴 타입 모두 동일해야 함접근 제어자는 더 좁게 만들 수 없음 (확장 가능은 함)상속 관계가 있어야 함@Override 애노테이션을 붙이는 것이 권장됨 (컴파일 타임 확인 가능)// 예시cla..
Java 컴파일 과정 자바의 컴파일 과정은 크게 다섯 단계로 나눌 수 있습니다. 개발자가 작성한 소스코드(.java)부터 시작하여, 실행 가능한 애플리케이션으로 변환될 때까지의 과정을 함께 살펴보겠습니다. 1. 자바 소스코드 작성 모든 것은 개발자가 자바 소스코드(.java 파일)를 작성하는 것으로 시작됩니다. 이 코드는 애플리케이션의 로직을 정의하며, 자바의 문법에 따라 구성됩니다. 2. 자바 컴파일러(Java Compiler)에 의한 컴파일 작성된 소스코드는 자바 컴파일러(javac)에 의해 컴파일됩니다. 컴파일 과정에서 소스코드는 자바 바이트코드(.class 파일)로 변환됩니다. 이 바이트코드는 JVM이 이해할 수 있는 중간 형태로, 아직 기계가 직접 실행할 수는 없습니다. 바이트 코드의 각 명령어..
1JVM이란 무엇이고 왜 필요할까? JVM이란? JVM(Java Virtual Machine)은 자바 코드를 컴파일하여 생성된 바이트코드를 실행하는 가상의 실행 환경입니다. 이는 자바 프로그램이 다양한 운영 체제에서 변경 없이 실행될 수 있도록 하여, 개발자가 플랫폼에 구애받지 않고 코드를 작성할 수 있게 해줍니다. JVM은 자동 메모리 관리, 보안 기능, 성능 최적화 등을 제공하여, 개발의 효율성을 높이고 애플리케이션의 안정성과 보안을 강화합니다. JVM의 장점과 특징 플랫폼 독립성 JVM은 다양한 운영 체제에서 동일한 바이트코드를 실행할 수 있게 해줍니다. 개발자는 운영 체제의 차이를 걱정하지 않고 애플리케이션을 개발할 수 있으며, 이는 소프트웨어의 이식성을 크게 향상시킵니다. 보안 JVM은 코드 실..
Java에서의 SOLID 원칙은 객체 지향 프로그래밍의 다섯 가지 설계 원칙을 의미합니다. 이 원칙은 소프트웨어 설계의 유연성, 유지보수성, 확장성을 높이기 위해 사용됩니다. 1. 단일 책임 원칙 (Single Responsibility Principle - SRP): - 한 클래스는 단 하나의 책임만 가져야 합니다. - 상황 예시: 예를 들어, 게시글 관리 클래스가 게시글 작성, 읽기, 수정, 삭제 등의 여러 기능을 수행하는 대신, 각각의 책임을 분리하여 게시글 작성, 게시글 읽기, 게시글 수정, 게시글 삭제를 각각의 클래스로 나눌 수 있습니다. 각 SOLID 원칙에 대한 상황 예시와 코드를 함께 설명해드리겠습니다. 아래는 게시글 관리 클래스가 단일 책임 원칙을 지키지 않는 경우를 보여줍니다. // 게..
제네릭(Generic)의 기본 형태는 클래스, 인터페이스, 메서드 등에서 타입 매개변수를 사용하여 일반화된 형태의 코드를 작성하는 것입니다. 기본형태 : public class ClassName { // T 타입을 사용하는 멤버 변수, 메서드 등을 선언 } 여기서 `T`는 타입 매개변수로, 어떤 타입이든 사용할 수 있습니다. `T`는 클래스 이름 뒤에 ``와 같이 선언되어야 합니다. 이렇게 선언된 클래스는 인스턴스를 생성할 때 구체적인 타입을 지정할 수 있습니다. 제네릭(Generics)은 Java에서 매우 유용하며 주로 다음과 같은 몇 가지 용도로 사용됩니다: 1. 타입 안정성(Type Safety) 보장 제네릭은 컴파일 시간에 타입 안전성을 제공하여 잘못된 타입의 객체가 코드 내부로 들어오는 것을 방..
생성자가 매개변수를 필요로 하는지 여부는 주로 객체를 초기화하는 데 필요한 데이터를 생성자가 받아야 하는지에 따라 결정됩니다. 매개변수가 필요한 경우와 필요하지 않은 경우 각각의 차이를 살펴보겠습니다. 1. 매개변수가 필요한 경우: - 객체가 생성될 때 필요한 초기 데이터나 정보가 있는 경우 생성자에 매개변수를 전달합니다. - 객체를 생성할 때마다 서로 다른 값을 가진 객체를 생성할 수 있습니다. - 예를 들어, 'Person' 객체를 생성할 때 이름과 나이와 같은 정보를 초기화해야 하는 경우 생성자에 해당 데이터를 매개변수로 전달합니다. 예시: public class Person { private String name; private int age; public Person(String name, in..