전체 글 47

코드스쿼드 선발과제(2024, 백엔드 과정)

12월 1일부터 12월 5일까지 진행된 2023년 코드스쿼드 선발 과제 진행 후기입니다. https://gist.github.com/dearmysolitude/467392c4331d8bd348be3b2fee61ab90 해당 gist의 README.md 와 동일한 내용입니다. Intro 5 일 동안 과제를 진행하며, 첫째 날 늦게 시작하여 마지막 전날에 완료하였음. 마지막 날은 과제 외에 제출을 요구하는 소개서와 설문, 그리고 리드미 정리를 진행하였다. 주어진 과제 기간이 여유롭지 않아 구현을 빠르게 시작하였다: 그러다보니 설계에는 별로 시간을 사용하지는 못함. 기능 요구사항 1 단계에서는 게임 로직을 구현 2 단계에서는 2 인이 플레이할 수 있는 로직 변경과 콘솔 입출력 실행의 추가 기능 3 단계에서는 ..

인터페이스 Interface

기능들의 목록을 가지고 있는 것: 무슨 기능을 만들어야 할 지 메서드에 대한 선언만을 가지고 있다. 즉, 규칙을 잡거나, 플로우 로직을 잡는데 사용한다. 객체의 사용 방법을 정의한 타입이다. 객체의 교환성을 높여주기 때문에 Upper CamelCase로 작성된다. 확장자가 .java파일로 작성한다. 모든 필드는 public static final이어야 하며, 모든 메서드는 public abstract이어야 한다. (Java 7까지는) final, abstract를 생략하면 자동으로 붙는다. Java 8 부터는 default 메서드(구현된 메서드)와 static 메서드도 선언이 가능하다. 인터페이스의 default 메서드: JDK 8에 추가된 메서드 default 메서드가 인터페이스에 추가된 이유에 대해 ..

Programming/Java 2023.12.01

Java의 String 클래스

String 클래스 public class StringExam{ public static void main(String[] args) { String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); } } new로 생성하지 않은 경우 상수 취급된다. 따라서 str1과 str2는 같은 것을 참조한다. new를 사용한 str3는 힙 메모리에 항상 새로운 객체를 생성한다. Reference 타입에서 ==는 같은 객체를 참조하는지 확인하는 연산자이다. 그래서 str1, str2, str3 를 비교하게되면 ==로 비교했을 때 1, 2는 참이 나오지만 1, 3을 비교하면 거짓이 나온다. 만약 new로 새로운 hello를 만들어 st..

Programming/Java 2023.11.30

추상 클래스 2: 템플릿 메서드 패턴 Template Method Pattern

추상 클래스는 템플릿 메서드 패턴에서 가장 잘 사용할 수 있다: 템플릿 메서드 패턴에 대해 살펴보도록 하자. 다음 같은 상황이라고 생각해보자. Controller 종류가 여러개 → { 초기화 - 같은 코드 실행 - 다른 코드 마무리 - 같은 코드 } Controller의 종류를 여러개 만들어 여러 종류의 케이스에 대해서 각각 처리를 하도록 Cotroller(추상클래스)를 부모로 하여 모델을 구현해 보자. 각 클래스는 적절하게 패키지를 작성하는 것이 좋다: 패키지 도메인은 생략 public abstract class Controller { protected final void init() { System.out.println("작업 시작"); } protected final void close() { Sy..

Programming/Java 2023.11.30

추상 클래스 1: 추상 클래스란

여러가지 속성들을 추상화하여 일반적인 속성만을 모아놓은 추상 클래스로 작성할 수 있다. 추상클래스는 인스턴스가 될 수 없다. 추상 클래스를 상속받는 자손이 인스턴스가 된다. abstract 키워드를 사용하여 클래스를 정의한다. 1개 이상의 추상 메서드로 이루어진다. 시리즈 추상 클래스 1: 추상 클래스란 추상 클래스 2: 템플릿 메서드 패턴

Programming/Java 2023.11.30

Java 생성자와 super(), Immutable

Java 생성자의 특징 기본 생성자는 생성자 오버로딩이 하나라도 되어있으면 자동으로 생성되지 않는다. 기본 생성자나 아무것도 초기화하지 않는 생성자의 경우 super() 생성자를 자동으로 포함하여 컴파일한다. 사용자가 super()생성자를 호출하는 코드를 작성하지 않으면 자동으로 부모의 기본 생성자가 호출된다. 만약 부모 클래스에 기본 생성자가 없을 경우에는 필요한 인자를 super()의 인자를 통해 전달하는 코드를 작성해야만 한다. 부모 클래스의 생성자로 초기화 후 자식 클래스 생성자가 초기화를 진행해야 한다는 것. 자신의 생성자를 호출할 때는 this()를 사용한다. this() 생성자는 생성자 내에서만 사용할 수 있다. 생성자 안에서 super()생성자를 호출하는 코드 다음이나, 첫번째 줄에 위치해..

Programming/Java 2023.11.30

Object 제공 메서드: toString() / equals() & hashCode()

Object는 기본적으로 모든 클래스들이 상속하는 클래스. 이 메서드들은 오버라이딩하도록 제공되는 메서드들이다. Example public class example { public static void main(String[] args) { Car car = new Car(); System.out.println(car); // println(Object x) } } Object를 받아서 출력하는 메서드를 가지고 있음: Object로 참조할 수 있는 모든 매개변수는 모두 이 메서드를 사용할 수 있다. 해당 println()을 살펴보자. → toString()메서드가 실행되는 것. 다만, Car 클래스에 Object 메서드를 오버라이드하여 작성하지 않으면 쓸모가 없다. 왜 이것들을 오버라이드하여 사용하나? ..

Programming/Java 2023.11.28

다형성 Polymorphism

다형성 Polymorphism 다형성 Polymorphism: 프로그램 언어 각 요소(상수, 변수, 식, 객체, 메서드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다(위키피디아, [다형성]). 또는 여러 형태를 받아들일 수 있는 성질, 상황에 따라 의미를 다르게 부여할 수 있는 특성 등으로 정의하기도 한다. 다형성을 활용하면 기능을 확장하거나, 객체를 변경해야 할 때 타입 변경 없이 객체 주입만으로 수정이 일어날 수 있다. 또한 상속을 사용하여 중복 코드까지 제거할 수 있어 객체 지향 설계와 가까워질 수 있다. 다형성 구현에는 다양한 방법이 있을 수 있지만, 오버로딩, 오버라이딩, 함수형 인터페이스가 대표적이다. - Tecoble, [다형성] 페이지에서 오버로딩 Overloadi..

Programming/Java 2023.11.28