개발 일지 168

[Java] 인터페이스(Interface)

컴퓨터 프로그래밍에서 사용하는 인터페이스는 '서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어주는 부분 또는 그런 접속 장치'라고 정의할 수 있다. 하위 클래스가 여러 상위 클래스를 상속받을 수 있다면 다양한 동작을 수행할 수 있지만, 이러한 경우 메서드 출처의 모호성 등 여러 문제가 발생할 수 있기에 자바 프로그래밍에서는 클래스를 통한 다중 상속을 지원하지 않는다. 하지만 다중 상속의 이점을 살리기 위해 자바는 인터페이스라는 것을 통해 다중 상속을 지원한다. 기본적으로 인터페이스도 추상 클래스처럼 자바에서 추상화를 구현하는 데 사용되는 점은 동일하지만, 추상 클래스에 비해 더 높은 추상성을 가진다는 점에서 큰 차이가 있다. 추상 클래스를 설계가 모두 끝나지 않은 '미완성 설계도'에 비유한다면 ..

개발 일지/Java 2023.01.02

[Java] final 키워드

final은 사전적으로 '최종의, 마지막의'라는 의미를 가진다. 변수(variable), 메서드(method), 클래스(class)에 사용될 수 있으며 어떤 곳에 사용되느냐에 따라 다른 의미를 가진다. 하지만 공통적으로 변경이 불가능하고 확장할 수 없다는 점에서 유사하다. final 키워드가 붙으면 다음과 같은 의미를 가지게 된다. 클래스 - 변경 또는 확장 불가능한 클래스, 상속 불가 메서드 - 오버라이딩 불가 변수 - 값 변경이 불가한 상수 final class FinalEx { // 확장, 상속이 불가능한 클래스 final int x = 1; // 변경되지 않는 상수 final int getNum() { // 오버라이딩이 불가한 메서드 final int localVar = x; // 상수 retur..

개발 일지/Java 2023.01.02

[Java] 추상화(Abstraction)

추상화의 사전적 의미는 '사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것'이다. 여기서 핵심적인 개념은 '공통성과 본질을 모아 추출하는 것'이다. 자바 프로그래밍에서의 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미한다. 상속이 하위 클래스를 정의하는 데 상위 클래스를 사용하는 것이라고 한다면 추상화는 기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것이다. 예를 들어, 강아지나 고양이 등의 애완동물은 먹기, 걷기 등의 행동을 하기 때문에 '애완동물'이라는 추상 클래스를 만들 수 있다. 이렇게 공통적인 속성과 기능을 모아서 정의해주면 코드의 중복을 줄일 수 있고, 보다 효과적으로 클래스 간의 관계를 설정할 수 있으며 유지 보수가 용..

개발 일지/Java 2022.12.30

[Java] instanceof 연산자

instanceof 연산자는 객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는 데 사용하는 연산자이다. 자바의 문법요소로 캐스팅이 가능한 지 여부를 boolean 타입으로 확인할 수 있다. 캐스팅 가능 여부를 판단하기 위해서는 '객체를 어떤 생성자로 만들었는가'와 '클래스 사이에 상속관계가 존재하는가'를 판단해야 한다. 프로젝트의 규모가 커지고 클래스가 많아지면 매번 이러한 정보를 확인하기 힘들어지는데, 이를 해결하기 위해 자바는 instanceof 라는 연산자를 제공한다. 참조변수 instanceof 타입 이렇게 입력했을 때 리턴 값으로 true가 나오면 참조 변수가 검사한 타입으로 타입 변환이 가능하며, false가 나온다면 타입 변환이 불가능하다. 참조 변수가 null인 경우에도 fals..

개발 일지/Java 2022.12.30

[Java] 참조 변수의 타입 변환

참조 변수의 타입 변환은 '사용할 수 있는 멤버의 개수를 조절하는 것'을 의미한다. 타입 변환을 위해서는 다음의 세 가지 조건을 충족해야 한다. 서로 상속관계에 있는 상위 클래스와 하위 클래스 사이에서만 타입 변환이 가능하다. 하위 클래스 타입에서 상위 클래스 타입으로 타입 변환(업캐스팅)은 형변환 연산자(괄호)를 생략할 수 있다. 상위 클래서에서 하위 클래스 타입으로 변환(다운캐스팅)은 형변환 연산자(괄호)를 반드시 명시해야 한다. package Practice; class Vehicle { String model; String color; int wheels; void startEngine() { System.out.println("시동 걸기"); } void accelerate() { System...

개발 일지/Java 2022.12.30

[Java] 다형성(Polymorphis)

다형성(polymorphis)은 상속, 캡슐화, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나이며, '하나의 객체가 여러 가지 타입을 가질 수 있는 것'을 의미한다. 자바 프로그래밍에서 다형성은 한 타입의 참조 변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미한다. 즉, 상위 클래스 타입의 참조 변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것이라고 할 수 있다. package Practice; class Animal { public void animalInfo() { System.out.println("저는 동물입니다."); } } class Dog extends Animal { public void animalInfo() { System.out.p..

개발 일지/Java 2022.12.30

[Java] getter과 setter 메서드

객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다. 데이터는 외부에서 접근하지 않도록 막고 메서드는 공개해서 외부에서 메서드를 통해 데이터에 접근하도록 유도한다. 대표적으로 private 접근 제어자가 포함되어 있는 객체 변수의 데이터 값을 추가하거나 수정하고 싶을 때 사용하는 메서드가 getter과 setter 메서드이다. class Animal { private String name; private int age; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { retu..

개발 일지/Java 2022.12.29

[Java] 캡슐화(Encapsulation)

캡슐화(encapsulation)란, 특정 객체 안에 관련된 속성과 기능을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것을 의미한다. 이렇게 캡슐화를 해야 하는 이유는 '데이터 보호의 목적'과 '내부적으로만 사용되는 데이터에 대한 불필요한 외부 노출'을 방지하기 위함이다. 즉, 캡슐화는 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는 것이다. 외부로부터 객체의 속성과 기능이 함부로 변경되지 못하게 막고, 데이터가 변경되더라도 다른 객체에 영향을 주지 않기 때문에 독립성을 확보할 수 있다. 또한, 유지보수와 코드 확장 시에도 오류의 범위를 최소화할 수 있어서 효과적인 코드 유지보수에 용이하다. 캡슐화는 자바 프로그래밍에서 4가지의 접근 제어자..

개발 일지/Java 2022.12.29

[Java] Object 클래스

Object 클래스는 자바의 클래스 상속계층도에서 최상위에 위치한 상위 클래스이다. 따라서 '자바의 모든 클래스는 Object 클래스로부터 확장된다'는 명제는 항상 참이다. Object 클래스는 필드가 없고 메서드로 구성되어 있다. 이 메서드들은 모든 클래스들이 Object를 상속하므로, 모든 클래스에서 용할 수 있다. 자바 컴파일러는 컴파일 과정에서 다른 클래스로부터 아무런 상속을 받지 않는 클래스에 자동적으로 extends Object를 추가하여 Object 클래스를 상속받도록 한다. class Example {// 컴파일러가 자동으로 extends Object 추가 } Object 클래스의 대표적인 메서드 toString() : 객체 정보를 문자열로 출력 equals() : 등가 비교 연산(==)과..

개발 일지/Java 2022.12.29

[Java] super과 super()

super 키워드와 super() 메서드는 this 키워드와 this() 메서드의 관계와 비슷하다고 할 수 있다. super 키워드는 상위 클래스의 객체, super() 메서드는 상위 클래스의 생성자를 호출하는 것을 의미한다. 여기서, 모두 상위 클래스의 존재를 상정하며 상속 관계를 전제로 한다. super public class HelloJava { public static void main(String[] args) { SubClass subClassInstance = new SubClass(); subClassInstance.callNum(); } } class SuperClass { int count = 1; } class SubClass extends SuperClass { int count =..

개발 일지/Java 2022.12.29