프로그래머스에서 진행하는 PCCP 정기 시험을 친구들과 같이 봤다. 싸피 과정이 끝나고 우리의 실력이 객관적으로 어느 정도인지 궁금했기 때문이다. 최근엔 기업 코테도 뜸했던 차에 PCCP 정기 시험으로 우리 수준을 점검해보기로 했다. PCCP(Programmers Certified Coding Professional)란?그렙에서 만든 코딩전문역량인증 자격증이다. 그렙은 프로그래머스, 모니토를 운영중인 회사이다. 과거엔 채용사항에 우대가 좀 있던 것 같지만 최근엔 많이 사라졌다고 알고 있다. 시험 안내시험시간: 120분문항수: 4문항시험과목: Python, JavaScript, Java, C, C++, C# (나는 Java를 선택했다.)방식: 비대면 (모니토 앱 사용)기존 기업 코테에서 익숙하게 쓰던 모니..
Java
프로젝트를 진행하며, Redis Stream에 객체를 넣을 때 직렬화를 해서 넣지 않아 에러가 발생했다. 평소에도 직렬화, 역직렬화를 듣긴 했지만 마주할 일이 없었기 때문에, 이번 기회에 정리해보고자 한다. 직렬화란?자바 직렬화는 JVM 힙 메모리에 있는 객체 상태(인스턴스 필드 값)를 바이트 시퀀스로 변환하는 과정이다. 메모리의 객체는 객체 그래프 구조인데, 이를 네트워크로 전송하거나 파일로 저장하려면 연속된 바이트 시퀀스로 변환해야 한다. 바이트 스트림은 뭘까?바이트 스트림은 데이터를 연속된 바이트로 전송 방식이다. 자바는 모든 입출력을 '스트림'이라는 추상화로 다루는데, 이는 데이터가 흐르는 단방향 통로와 같다. 스트림을 통해 바이트 시퀀스가 소스에서 목적지로 순차적으로 전달된다.모든 컴퓨터 ..
다이아몬드 문제란?다이아몬드 문제는 객체지향 프로그래밍에서 다중 상속을 지원하는 언어에서 발생할 수 있는 모호성 문제로, 다이아몬드 모양의 상속 계층 구조를 가질 때 발생한다. 위 클래스 다이어그램과 같은 상속 구조에서 D 클래스의 인스턴스가 A 클래스에서 정의된 메서드나 속성에 접근할 때, B를 통해 접근해야 할지 C를 통해 접근해야 할지 모호해지는 문제가 발생한다. 자바에서의 다이아몬드 문제다이아몬드 문제는 크게 두 가지 이슈를 가진다: 메서드 호출의 모호성: D에서 A의 메서드를 호출할 때, B의 구현과 C의 구현 중 어떤 것을 사용해야 할지 모호하다. 필드 중복 문제: A에 인스턴스 변수가 있다면, B와 C를 통해 각각 중복 상속되어 D는 동일한 A 필드의 두 복사본을 갖게 된다. 이로 인해, ..
프로그래밍에서 두 객체를 비교할 때 어떤 기준으로 비교할지 명확해야 한다. "같다"라는 것이 무엇을 의미하는지 정의해야 하는데, 이때 동일성과 동등성은 객체를 비교할 때 중요한 개념이다.자바에서는 이 두 개념을 `equals()`와 `==`연산자를 통해 구분할 수 있다. 이 개념을 설명하기 전에 `==`연산자는기본 타입을 비교할 때는 값 자체를, 참조 타입을 비교할 때는 객체의 메모리 주소를 비교한다는 사실을 알고 가자. 동일성이란?동일성은 두 객체가 메모리 상에서 동일한 주소를 참조하고 있는지를 비교하는 개념이다. 자바에서는 `==`연산자를 사용하여 객체의 동일성을 비교한다. 두 객체를 `==`연산자로 비교하면, 힙 메모리에서 같은 객체인지를 확인한다. Object obj1 = new Object(..
equals()`equals()` 메서드는 어떤 다른 객체가 이 객체와 동등한지를 나타낸다. `null`이 아닌 참조 값 `x`와 `y`에 대해 이 메서드는 `x`와 `y`가 같은 객체를 참조하는 경우(`x == y`가 `true`인 경우)에만 `true`를 반환한다. 이 메서드를 오버라이딩할 때는 일반적으로 `hashCode()` 메서드도 함께 오버라이딩해야 한다. 이는 `hashCode()` 메서드의 일반적인 계약을 유지하기 위함인데, 이 계약은 동등한 객체들은 동등한 해시 코드를 가져야 한다고 명시한다. 다음은 java8 references의 `equals()` 메서드 부분의 일부를 최대한 원문으로 번역해보았다. 기본 타입이 아닌 참조 타입의 객체를 비교할 때, `equals()` 메서드를 사용한..
알고리즘 구현 문제를 풀다보면, 나는 값만 파라미터로 넘겼는데 배열의 원본 값이 바뀌는 경우가 있다. 이런 문제를 해결해 내 것으로 만들기 위해 얕은 복사와 깊은 복사를 알아보자.얕은 복사얕은 복사는 객체의 주소값을 복사하는 방식이다. 즉, 해당 객체는 원본 객체를 참조하게 된다. 기본 타입은 값이 복사되지만, 참조 타입은 주소값이 복사된다. ➡️ 자바에서 타입을 나눈 이유int[] arr1 = new int[4];arr1[0] = 1;arr1[1] = 2;arr1[2] = 3;arr1[3] = 4;int[] arr2 = arr1;arr2[0] = 4;System.out.println(Arrays.toString(arr1));System.out.println(Arrays.toString(arr2));우리..
일급 컬렉션이란?일급 컬렉션은 컬렉션을 멤버 변수로 갖는 클래스를 만드는 규칙이다. `마틴 파울러`가 제한한 `컬렉션 캡슐화` 원칙에서 시작되었고 이후 컬렉션을 다루는 방식에 SOLID의 단일 책임 원칙(SRP)을 도입했다. 일급 컬렉션은 아래 3가지 조건을 만족하는 클래스다. 컬렉션을 멤버 변수로 갖는 클래스해당 클래스는 컬렉션을 private 필드로 가짐컬렉션에 관련된 로직만 수행하는 메서드를 가짐public class Student { private String id; private String name; public Student(String id, String name) { this.id = id; this.name = name; }}`St..
자바의 예외 계층 구조는 다음과 같다.오늘은 여기서 Checked Exception과 Unchecked Exception에 대해 알아보자.Checked ExceptionChecked Exception은 컴파일 시점에 확인되며, 반드시 처리해야 하는 예외이다. `Exception` 클래스를 상속하지만 `RuntimeException`을 상속하지 않은 모든 예외이다. 반드시 처리해야 하므로 try-catch문으로 예외를 처리하거나 throws를 선언해 호출자에게 예외를 위임한다. Unchecked ExceptionUnchecked Exception은 런타임 시점에 발생하며, 컴파일러가 처리 여부를 강제하지 않는다. `RuntimeException`을 상속하는 모든 예외이다. `Error`와 그 하위 클래스도..