본문 바로가기

JAVA

(8)
추상 클래스 vs 인터페이스 분명 목적에 따라 쓰임이 분명히 다르지만 너무도 헷갈리고 고민되는 두가지를 가져왔다. 각각 어떤 것인지 알아보자. 추상 클래스 (Abstract Class) 추상 클래스(Abstract Class)는 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 이러한 특성 탓에 미완성 설계도라고 표현하기도 한다. 추상클래스는 상속을 위한 클래스이기 때문에 따로 인스턴스를 생성할 수 없다. 추상 클래스는 일부 메서드가 구현되지 않고 선언만 되어 있는 클래스다. 이러한 메서드를 추상 메서드라고 한다. 추상 클래스는 상속을 통해 자식 클래스에서 추상 메서드를 구현하도록 강제한다. 추상 클래스는 상태(멤버 변수)를 가질 수 있다. 한 클래스는 하나의 추상 클래스만 상속받을 수..
업캐스팅(Upcasting) (feat. 다운캐스팅) https://golden-retriever.tistory.com/16 오버로딩(Overloading) vs 오버라이딩(Overriding) 오버로딩(Overloading) 오버라이딩(Overriding) 목적 한 클래스 내에서 같은 이름의 메서드를 여러 개 정의하여, 매개변수의 타입이나 개수에 따라 다른 동작을 수행하도록 함 상속 관계에서 자식 클래 golden-retriever.tistory.com 위 글에서 동적바인딩의 예시를 보기위해 업캐스팅 얘기를 했었다. 업캐스팅은 컴파일 시점에서 추후 호출할 것처럼 보는 메서드와 실제 런타임 시점에서 호출되는 메서드가 다른, 즉 런타임 시점에서 메서드 호출이 결정되는 동적 바인딩의 예시로 쓰였다. 이 경우만 보면 굳이 혼란만 야기하는 업캐스팅을 왜 쓰나 라는..
오버로딩(Overloading) vs 오버라이딩(Overriding) 오버로딩(Overloading) 오버라이딩(Overriding) 목적 한 클래스 내에서 같은 이름의 메서드를 여러 개 정의하여, 매개변수의 타입이나 개수에 따라 다른 동작을 수행하도록 함 상속 관계에서 자식 클래스가 부모 클래스의 메서드를 재정의하여, 같은 메서드 호출에 대해 다른 동작을 수행하도록 함 바인딩 정적 바인딩 동적 바인딩 다형성 O O 매개 변수 메서드 이름은 같지만, 매개 변수의 타입, 개수 또는 순서가 달라야 함 메서드 이름, 매개 변수의 타입 및 개수가 부모 클래스에 있는 메서드와 정확히 동일해야 함 반환 타입 영향을 주지않음. 다양한 반환 타입이 가능함 반환 타입이 부모 클래스의 메서드와 호환되어야 함 즉, 같거나 자식 타입일 수 있음 접근 제한자 영향을 주지 않음 자식 클래스에서 오..
DTO와 VO는 같은 건가? 흔히 DTO와 VO를 혼용해서 많이들 사용한다. 그렇다면 왜 혼용을 하게 됐을까? core J2EE Patterns 책의 1판에서는 getter/setter가 있고 데이터 전송을 위해 사용되는 객체를 VO로 정의했지만, 2판부터는 TO로 재정의하였기 때문으로 추측된다. 비록 혼용되었고, 아직까지도 혼용되고 있지만 이름이 다르다는 것은 의미 역시 다르다는 것. 각각에 대해 명확한 사실을 알아보자. DTO (Data Transfer Object) 목적 : 다른 레이어, 서비스, 혹은 외부 시스템 간의 데이터를 전송하기 위한 객체다. 사용 케이스 : 주로 데이터베이스와의 소통, 네트워크를 통한 데이터 전송, 클라이언트와 서버 간의 데이터 교환 등에 사용된다. 특징 : 데이터 전송을 목적으로 하기 때문에, 복잡..
생성자를 메서드라고 할 수 있을까? 생성자(Constructor) 1. 객체의 초기화를 담당한다. 2. 클래스의 이름과 동일한 이름을 가진다. 3. 반환 타입을 정의하지 않으며, 객체를 생성할 때 자동으로 호출된다. 4. 객체 생성 시 필요한 초기 설정을 수행하거나, 초기 값을 할당하는 데 사용된다(가지고 있는 멤버들을 메모리에 올려 객체를 생성하는 역할). 메서드(Method) 1. 객체가 수행할 수 있는 동작이나 행위를 정의한다. 2. 사용자가 정의한 이름을 가지며, 특정 작업을 수행한다. 3. 반환 타입을 명시적으로 정의해야 하며, 객체 또는 클래스에 따라 호출된다. 4. 객체의 상태를 변경하거나, 값을 계산하여 반환하는 등의 작업을 수행한다. public class Person { String name; int age; // 생성자..
메서드의 오버로딩(Overloading) (feat. 정적 바인딩) 오버로딩(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 add(String a, String b) { return a + b; } } 그렇다면 어떠한 장점이 있을까? 1. 코드의 가독성과 재사용성 향상 : 같은 작업을 수행하지만 매개변수의 타입이나 ..
접근 제한자 (public, private, protected, default) 자바에는 클래스, 메서드 필드(변수), 생성자의 접근 제한을 위해 사용한 접근 제한자(public, private, protected, default)가 있다. 1. public 적용 범위 : 클래스, 메서드, 필드, 생성자 설명 : public으로 선언된 멤버는 어디서든 접근할 수 있다. 즉, 모든 클래스에서 해당 멤버에 접근할 수 있다. 일반적으로 공개 API를 구성하는데 사용된다. // PublicClass.java 파일 public class PublicClass { // Public 메서드 public void show() { System.out.println("PublicClass의 show 메서드 호출됨."); } // Public 정적 메서드 public static void staticS..
JDK JRM JVM 및 자바 실행 과정 Java는 쉽게 말해서 클래스 단위로 프로그래밍을 하는 객체지향 프로그래밍이다. 그렇다면 개발과 실행에 있어서 필요한 것은 무엇일까? JDK(자바 개발 시 필요한 라이브러리와 개발 도구가 포함되어 있음, JRE 역시 포함) JRE(자바 프로그램을 실행(동작)시킬 때 필요한 라이브러리 API를 배포하는 패키지다) JVM(자바 가상 머신, 자바를 돌리는 프로그램, 작성한 자바 프로그램이 OS에서 실행 가능하도록 번역 실행 환경을 제공하는 자바 프로그램의 구동 엔진) 자바 11 이상 버전에서는 전통적인 의미에서의 별도 JRE 폴더가 JDK 설치와 함께 제공되지 않는다. 이는 JDK가 JRE의 모든 기능을 포함하고 있기 때문이다. 따라서, JDK를 설치하면 JRE가 설치되어 있는 것으로 간주할 수 있지만, 이전..