본문 바로가기

Study/Java18

[Java] abstract 클래스와 interface는 언제 사용할까? 용어정리 우선 간단히 용어를 살펴보기로 해요. abstract 클래스( 미완성 클래스 ) 추상메서드가 없거나, 하나 이상을 포함하는 클래스에요.(추상 메서드가 하나 이상 포함될 시, 클래스 앞에 abstract를 반드시 표기해야해요) 인스턴스화가 불가능 하지만, 서브 클래싱은 가능해요. abstract class Car { } class BumperCar extends Car { } public static void main(String[] args) { Car car = new Car(); // x Car car2 = new BumperCar(); // o } interface interface는 자바에서 한 단계 더 높은 추상화를 하기 위해 사용돼요. 추상 메소드와 상수, 디폴트 메소드로 이루어진 클.. 2021. 4. 4.
[Java] 원시값 포장이란? 원시값 포장이라는 말이 모호해요. 우선 원시값 포장이라는 말이 어디서 나왔는지 확인해볼 필요가 있어요. 모든 원시값과 문자열을 포장하라 라는 말은 객체지향 체조 원칙에서 나온 말이에요. 원시값 포장이 왜 필요하죠? 원시값 포장은 Primitive Obsession Anti Pattern(도메인의 객체를 나타내기 위해 primitive타입을 쓰는 나쁜 습관)을 피하기 위해 필요해요. 즉, 원시값 포장은 원시 유형의 값(변수명)을 이용해 의미를 나타내지 않고, 의미있는 객체로 포장한다는 개념이라 볼 수 있어요. 아직 설명이 부족해요. 게임을 위한 배팅 금액을 아래와 같이 나타낼 수 있어요. public class Foo { private int bettingMoney; public void addMoney(.. 2021. 3. 15.
[Java] instanceof vs isInstance() instanceof과 isInstance()모두 객체의 클래스를 확인하는데 사용합니다. 하지만 클래스의 체크 시점이 정적(컴파일 타임)이냐 동적(런타임)이냐의 차이를 보입니다. 즉, instanceof는 컴파일타임에 타입 에러를 체크하고, isInstance()는 런타임에 타입 에러 체크를 합니다. isInstance() 사용 예 // Java program to demonstrate working of isInstance() // method public class Test { // This method tells us whether the object is an // instance of class whose name is passed as a // string 'c'. public static bo.. 2021. 3. 11.
[Java] 정적 팩토리 메서드 장단점과 사용시기 정적 팩토리 메소드의 특징 정적 팩토리 메소드의 장점은 곧 특징이 돼요. 크게 4가지의 장점이 있어요. 장점 이름이 있으므로 생성자에 비해 가독성이 좋다. 호출할 때마다 새로운 객체를 생성할 필요가 없다. 하위 자료형 객체를 반환할 수 있다. 형인자 자료형 객체를 만들 때 편리하다. 단점으로는 2가지가 있는데요. 단점 정적 팩토리 메서드만 있는 클래스라면, 생성자가 없으므로 하위 클래스를 못 만든다. 정적 팩토리 메서드는 다른 정적 메서드와 잘 구분되지 않는다. (문서만으로 확인하기 어려울 수 있음) 장, 단점을 알면, 이제 도대체 언제 써야하는지 알아야겠죠? 그전에 매번 헷갈리는 정적 팩토리 메소드의 네이밍 컨벤션을 조금 살펴보고 가야할거 같아요. 정적 팩토리 메소드 네이밍 컨벤션 from: 하나의 매.. 2021. 3. 10.
[Java] 상속은 캡슐화를 깨뜨린다? public class Car{ private final String name; Car(String name) { this.name = name; } public final String getName() { return name; } } public class Avante extends Car{ Avante(String name) { super(name); } public void print() { System.out.println(getName()); } } 현재와 같이 부모 객체(Car)의 멤버변수가 private이고 메서드가 public final로 되어있는 상태에서도, 상속때문에 캡슐화가 깨졌다고 볼 수 있는건가? → 그렇지않다.현재 부모객체의 것들을 자식객체가 변경하지 못한다 (final 메소드.. 2021. 3. 6.
[Java] 컬렉션 프레임워크(Collections Framework) [Java] 컬렉션 프레임워크(Collections Framework) 자료구조의 분류 자료구조 분류법은 많은 분류법이 있지만, 대표적으로 많이 분류되는 방법은 선형 자료구조(Linear Data Structure)과 비선형 자료구조(Nonlinear Data Structure)로 나눌 수 있습니다. 이러한 분류를 보통 '형태에 따른 자료구조'라고 보고, 각 자료구조에 알맞게 구체화 된 것들을 '구현된 자료구조'라고 합니다. 먼저 선형 자료구조(Linear Data Structure)에 대해 알아보면, 선형 자료구조는 쉽게 생각해서 데이터가 일렬로 연결된 형태라고 보면 됩니다.. 우리가 흔히 쓰는 int[] 배열같은 것이라 생각하면 됩니다.. 선형 자료구조는 대표적으로 리스트.. 2021. 2. 28.
[Java] VO(Value Object)란? 개발을 하다 자주 VO라는 개념을 들은적이 있습니다. 대략적으로 값 객체 패턴(Value object pattern) 즉, 객체를 값처럼 쓸 수 있고, 제약사항 중 하나는 객체의 인스턴스 변수가 생성자를 통해서 일단 설정된 후에는 결코 변하지 않음을 보장한다는 것입니다. 저도 위와 같이 얕게만 알고있었는데, 이번 기회를 통해 제대로 알아보려 합니다. 제가 봤던 재미난 글을 통해 포스팅을 작성하려합니다. VO(Value Object)? 만약 아래와 같은 질문을 받았다고 생각해봅시다. 사람의 나이를 나타내기 위해 어떠한 변수 타입을 사용해야 할까요? [] Integer [] Boolean [] String 어떠한 결정을 내릴건가요? "Boolean은 true, false니까.. 일단 아니고,, Integer.. 2021. 1. 26.
[Java] Code Convention 개발자라면 협업 시, 사용하는 언어의 코드 컨벤션을 지켜야 합니다. 이전까지는 느낌상 이렇게 하면 되겠다는 생각으로 개발을 했었는데, 굉장히 위험한 생각인 것 같아 정리하게 되었습니다. 이 포스트는 Google Java Style Guide 의 내용을 토대로 썼습니다. 1. 소개 Java 소스 파일은 아래의 규칙을 준수하는 경우에만 Google 스타일로 설명이 됩니다. Google에서는 어떤 코딩 스타일을 따르고 있는지 알아봅니다. 1.1 용어 참고 달리 명시되지 않는 한, 클래스라는 용어는 "일반"클래스, 열거 형 클래스, 인터페이스 또는 주석 유형(@interface)을 의미하기 위해 포괄적으로 사용됩니다. 클래스의 멤버라는 용어는 중첩 된 클래스, 필드, 메서드 또는 생성자를 의미하기 위해 포괄적으.. 2021. 1. 26.
[Java] JVM 이란? 자바 바이트코드(.class 파일)는 JRE(Java Runtime Enviromnment) 위에서 동작합니다. 이 JRE에서 가장 중요한 요소는 자바 바이트코드를 해석하고 실행하는 JVM(Java Virtual Machine)입니다. JRE는 자바 API와 JVM으로 구성되며, JVM의 역할은 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어 들여서 자바 API와 함께 실행하는 것입니다. 개발 관련 도구는 JDK에서 제공합니다. JVM에 들어가기 앞서 먼저 Java의 특징을 얘기하겠습니다. Java의 큰 특징은 아무 하드웨어(CPU)던, 아무 운영체제(OS)던 상관없이 컴파일 된 코드(바이트코드)가 플랫폼 독립적이라는 점입니다. 이러한 특징을 구현하기 위해 JVM이 필요합니다. 단순.. 2021. 1. 26.