자바
[Java] 디미터의 원칙
디미터의 원칙이란? 특정 객체가 다른 객체의 정보를 너무 많이 알다 보면 결합도가 높아지면서 문제를 야기한다. 이러한 문제를 개선하기 위해 객체에게 자료를 숨기는 대신 함수를 공개하는 것을 디미터의 원칙이다. 본인이 아니라 협력하는 객체의 내부 구조에 대해 알다보면 결합도가 생기는데, 이때 강하게 결합되지 않도록 협력 경로를 제한하는 원칙이다. 즉, 자기 소유의 장난감, 자기가 만든 장난감, 그리고 누군가 자기에게 준 장난감하고만 놀 수 있다. 하지만 절대 장난감의 장난감과 놀면 안 된다. 객체 지향 생활체조 원칙의 한줄에 점을 한 개만 찍는다. 원칙으로도 불리운다. 디미터의 원칙을 지키지 않는 경우 더 자세히 살펴보자. 보통 getter()를 사용해서 다른 객체의 값을 많이 가져오는데, 본인을 제외한 ..
[Java] 인터페이스
인터페이스란? 만약 사람이 움직이는 것을 코드로 구현할 때, 사람은 걷기 뛰기 달리기 등 다양한 동작이 가능하다. 이러한 행동들을 필요할 때마다 추가를 한다면 코드를 작성하는 입장에서 굉장히 번거로울 것이다. 인터페이스를 사용하면 이러한 번거로움이 없어진다. 즉, 사람과 행동 사이에 중개자 역할을 담당하는 것이 인터페이스다. 그리고 행동에 필요한 틀을 선언해 놓아 구현을 강제한다. 장점 - 중개자를 통해 코드를 작성하기 때문에 동시 작업이 가능해진다. (만약 중개자가 없는 상태에서 동시개발을 진행한다면 추가로 변경해야 하는 부분이 생겨 꼬일 수 있다.) - 선언과 구현이 분리되어 있기 때문에 구현 부분을 수정해도 다른 클래스에 영향을 미치지 않는다. - 코드 변경 없이 다양한 실행 내용이나 결괏값을 구할..
[프로그래머스] 멀쩡한 사각형 (Java)
프로그래머스 Level 2 멀쩡한 사각형 (자바) 출처 https://programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr 문제 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군..
[Java] Object(toString(), equals(), hashCode())
Object가 모든 클래스의 조상 클래스는 사실을 사람들이 잘 모를 수 있다. 모든 클래스가 Object를 상속받고 있지만, 생략되어 있기 때문에 관련 내용을 보지 않았다면 알 수가 없다. 나 또한 처음에는 알지 못했다. 그래서 모든 객체는 Object의 메소드를 모두 호출해 사용할 수 있다. 총 11개의 메서드로 구성되어 있는데, 이 중 몇 가지를 살펴보고자 한다. toString() - 기본 동작 : 객체의 해시코드 출력(클래스명@16진수해시코드) equals() 메소드 다음으로 가장 많이 사용했던 메소드다. 나는 문자열이 아닌 변수를 문자열로 변환시킬 때 많이 사용했다. 그래서 당연히 문자열을 리턴하는 역할로 알고 있었지만 원형은 달랐다. 예시를 살펴보자. 아래와 같이 객체에 toString()을 ..
[Java] StringBuilder vs StringBuffer
Java로 코딩 테스트를 준비하다 보면 문자열 문제를 많이 마주한다. 이때, 기본 String을 사용하기도 하지만 StringBuilder와 StringBuffer를 사용하는 경우도 많다. 이 두가지에 대해 알아보도록 하자! String String과 2개 클래스의 차이를 보면 불변함의 차이가 있다. String : 불변(immutable) String 객체는 한 번 생성되면 할당된 메모리 공간이 변하지 않는다. 즉, +연산을 사용했을 때 기존의 문자열에 문자를 덧붙이는 것이 아니라 덧붙여진 새로운 String 객체를 만드는 것이다. 이것은 메모리 측면에서 굉장히 비효율적이다. 위와 반대로 간단하게 사용하거나, 동기화에 대해 신경쓰지 않아도 되는 경우에는 불변함이 장점이다. 자바에서 String은 Hea..
[TIL] Day 1
오늘(8월 2일)부터 그토록 고대하던 데브 코스를 시작했다. 교육과정 소개 중 눈길을 끌었던 것들이 많이 있었다. 그중 하나인 TIL을 오늘부터 작성해보려고 한다. 개인적으로 TIL은 꾸준함이 굉장히 중요하다고 생각하다. 지금은 이렇게 밤늦게라도 작성하지만, 나중에 나는 나태해질 수 있으니 이 글을 보고 정신 차려 12월까지 쭈욱 진행해나갔으면 좋겠다. TIL이란? Today I Learned의 약자로 오늘 내가 공부하거나 배운 것을 기록하는 용도다. 강의를 들으면서 나에게 부족하고 추가로 공부해야 할 필요성을 느낀 부분을 중점으로 적겠습니다. TIL 1. Build Tool 현재 사용하는 Framework가 나오기 전까지 개발자분들은 직접 코드를 빌드하고 실행시켰다고 한다. 이것은 매우 불편하고 귀찮은..
[Java] Solid란?
Solid를 쓰는 이유? 객체지향 설계가 더 쉬워지고, 유지보수와 확장도 쉬워짐 1. SRP(Single Responsibility Principle) : 단일 책임 원칙 "어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다." - 하나의 객체가 하나의 책임을 갖는 것 - 즉, 하나의 객체가 자신이 할 수 있는 것과 해야 하는 것만 수행할 수 있도록 설계되어야 한다! SRP를 지켜야 하는 이유 응집도와 결합도 관점에서 접근해야 한다. 응집도 - 한 프로그램 요소가 얼마나 뭉쳐있는가를 나타내는 척도. - 응집도가 높은 클래스는 하나의 책임에 집중하고, 독립성이 높아져 재사용이나 기능의 수정, 유지보수가 용이하다. 결합도 - 클래스 간의 상호 의존 정도. - 결합도가 낮으면 클래스간의 상호 의존성이 ..
[Java] 다형성, 캐스팅, 추상 클래스, 추상 메서드
다형성이란? 동일한 타입을 사용하지만 다양한 결과가 나오는 성질 실행 도중에 어떤 객체를 필드로 사용하느냐에 따라 결과가 달라짐 자동 형변환을 이용해 필드값을 변경하면 메서드를 수정 안 해도 다양한 결과를 얻을 수 있음 ex) 컴퓨터는 저장소, 그래픽 카드 등의 객체를 보유하고 있다. 하지만, 사용하면서 부품을 교체해가면서 사용한다. 새로운 부품은 기존과 동일하지만 실행 결과는 더 좋게 나온다. 캐스팅(Casting) : 강제 타입 변환 부모 타입을 자식 타입으로 변환하는 것 자식 타입이 부모 타입으로 자동 형변환한 후, 본래 타입으로 변환할 때 본인의 필드나 메서드 사용이 가능해짐 추상 클래스 클래스들의 공통 특성을 추출해 선언한 클래스 실체 클래스와 상속 관계 추상 클래스가 부모, 실체 클래스가 자식..