전체 글

기록 및 공유. 언젠가는 팔만대장경 같은 존재감을 가졌으면 좋겠습니다.
객체지향의 특성 중 하나인 추상화는 상속과 관련이 있다. 객체지향의 특성 - 상속객체지향의 특성 중 상속에 대해 기록해보려한다. 상속은 두 객체 사이에서 정의되는 관계다. 두 객체는 다음과 같다.상속을 해주는 객체: 상위, 부모, 혹은 super 객체상속을 받는 객체: 하위, 자jtechtalk.tistory.com상속에서 짚고 넘어갔듯이, 상속 관계에선 상위 객체가 하위 객체보다 추상적이어야 하고 하위 객체는 추상적인 상위 객체의 구체적인 상태여야 상속 관계가 바람직한 상속 관계다. 상속 관계에서 추상 객체와 구체 객체는 다음과도 같다.추상화된 객체: 추상체구체적인 객체: 구상체상속과 추상화추상화는 상대적이다. 상속의 관계도 추상화로 이루어진 관계라고 할 수 있다. 상대적으로 추상적인 상위 객체가 추상..
객체지향의 특성 중 상속에 대해 기록해보려한다. 상속은 두 객체 사이에서 정의되는 관계다. 두 객체는 다음과 같다.상속을 해주는 객체: 상위, 부모, 혹은 super 객체상속을 받는 객체: 하위, 자식, (this) 객체상속을 하는 객체는 하위 객체에게 필드 또는 메서드를 전달할 수 있다. 하위 객체가 상위 객체의 접근 제한에 따라 상위 객체의 필드 또는 메서드에 접근하고 사용할 수 있는 것이 객체지향의 특성인 상속이다. 부모 객체, 그리고 자식 객체는 다른 말로 추상 객체, 그리고 구체 객체라고 할 수 있다. 상속에 관해선 바로 이 추상과 구체의 개념적인 요소들을 기록해보려한다.추상 객체와 구체 객체흔히들 부모 또는 상위, 그리고 자식 또는 하위 객체라고 하지만, 상속의 관계에 놓여진 두 객체를 가장 ..
객체지향의 특성은 4가지다.캡슐화상속추상화다형성객체지향을 처음 접했을 때 특성 이전에 SOLID원칙을 먼저 접했다. 그래서 SOLID와 객체지향의 특성이 엄연히 다르다는 것을 잘 인지하지 못 했었는데, SOLID는 객체지향의 특성을 더욱 살려 좋은 소프트웨어를 설계하기 위한 원칙이다.캡슐화캡슐화는 객체가 책임을 수행하는 단위로써 완전함을 갖는 의미를 가지고 있다. 객체가 어떤 기능을 수행함에 있어, 다른 외부 객체와 협력할 필요가 있을 수도 있다. 이 때 객체가 다른 외부 객체를 의존한다고도 하는데, 가장 이상적인 캡슐화는 이 의존성이 최대한 없도록 만드는 것이다. 가능한 독립적으로 기능을 수행할 수 있는 완전성을 가지는 것이 가장 높은 수준의 캡슐화가 성취된 것이고, 의존성이 있더라도 최대한 느슨하게 ..
프로그래머스의 백엔드 데브코스에서 했던 학습을 처음부터 복습하며 기록을 남겨보려 한다. 가장 먼저 객체지향 프로그래밍에 대해 학습했다. Java가 1990년대에 객체지향 언어로 등장했다. 직관적으로, 객체지향 프로그래밍은 프로그램을 객체들과 그들 간의 메세지로 구성한 프로그램이다. 그렇다면 Java로 작성한 프로그램은 객체지향 프로그래밍인가? 그렇지 않다. 객체지향적 철학, 사고에 맞게 프로그램을 만들어야 객체지향 프로그래밍이 완성된다. Python, C++ 등의 다른 언어, 그리고 Javascript 또한 객체지향 사고를 접목해 객체지향 프로그래밍을 만들 수 있다.OOP의 등장 배경객체지향 프로그래밍은 흔히들 프로그램이 거대화하면서 등장했다고 한다. 거대한 프로그램을 만드는 것은 어떤 방법으로든 가능하..
· DevOps/CICD
코드 품질을 분석하기 위한 도구는 여러가지가 있다. SonarQube 같은 대표적인 정적 코드 분석 도구를 사용해서 다양한 유형의 문제나 취약점 등을 지속적인 모니터링으로 찾아 일정 수준 이상의 코드 품질을 유지하는 것은 엔지니어로서 아주 바람직한 선택이라고 생각한다. 오늘은 SonarQube 같은 다양한 기능의 프로그램이 아닌 간단한 방식으로 코드 분석을 도와줄 수 있는 Checkstyle을 도입한 경험을 포스팅 해보겠다. Code Quality Tool & Secure Analysis with SonarQubeEmpower development teams with a code quality & security solution that deeply integrates into your enterpris..
· DevOps/CICD
수월한 애자일 개발을 위해 CI/CD는 필수적이라고 볼 수 있다. 이를 위한 DevOps팀이 존재해서 굉장히 전문적인 분야라고 생각이 될 수도 있지만, CI/CD는 어렵지않게 구현할 수도 있다. 내가 프로젝트를 진행하면서 도입했던 빌드 자동화에 대해 작성해보려 한다.CI - Continuous Integration직관적으로 CI는 지속적인 통합, CD는 지속적인 배포이다. 통합과 배포가 반복적으로 이루어질 때 귀찮은 반복 작업을 자동으로 이루어지도록 자동화를 해놓는 것이 CI/CD이다. CI에 집중해보자. 통합이란 무엇을 말하는걸까?애자일 방법론이 개발 방법론 중 대세가 되었다. 동시다발적으로 작업을 진행함으로써 작업 속도를 높이고 피드백을 더욱 빠르게 수용하는 것이 효과적이라고 생각한다. 이로 인해 전..
이전 포스트에서 Flyway를 사용해 프로덕션 DB의 마이그레이션 버전 관리를 했던 경험을 기록했다. 로컬 환경에서 마이그레이션 버전 관리가 필요할까? 프로덕션 서버의 DB 관리 시 빛을 발할 Flyway이지만, 동작을 보장하기 위해 로컬 환경의 DB와 개발 서버의 DB에서도 똑같이 적용할 필요가 있다. 개발 서버의 DB에도 데이터는 들어가기 쉽다. 프로덕션 서버라고 생각하고 올바른 데이터의 CRUD만을 최대한 다루면 유효한 데이터만을 개발 DB에 담고 개발 DB의 버전 관리 또한 유의미하게 할 수 있다. 그렇다면 로컬 환경의 DB는 어떨까? 개발자들이 각자 개발하는 만큼 기능이나 스키마의 추가나 삭제, 변경 등이 각자의 컴퓨터에서 무분별하게 이루어질 것이다. 버전 관리가 유의미하진 않지만, Flyway..
웹 애플리케이션 프로젝트에서 DB 마이그레이션을 위해 사용했던 Flyway에 대해 정리해보겠다. Flyway Flyway는 오픈소스 DB 마이그레이션 툴이다. 핵심적으로 무엇을 도와주냐면, DB 스키마에 대한 변경을 추적하고 업데이트나 롤백을 쉽게 진행하도록 애플리케이션의 DB 스키마 버전 관리를 도와준다. 자바/스프링 프로젝트를 위한 툴이 아닌 다른 언어로 된 애플리케이션을 사용할 때도 쓸 수 있고, CLI나 API 등을 지원하기도 하고 데스크탑 애플리케이션도 존재한다. 왜 변경사항을 추적할까? 로컬 디바이스, 우리의 컴퓨터에서 개발을 할 때는 변경의 추적이 상관없을 수도 있다. 내가 개발해서 내가 사용한다면 그 안의 데이터를 내가 직접 관리하고, 그 관리가 중요하지 않을 수도 있지 않은가? 하지만 변..
다른 글에서 소개했던 것처럼, 스프링 부트의 application.yaml을 이용해 Properties를 관리하는 방법은 다양한 애너테이션을 이용한 여러가지 방법이 있다. 그 중에서 내가 생각하기에 가장 객체지향스러운 방법을 오늘 포스트에서 다뤄보려 한다.@ConfigurationProperties의 단점@ConfigurationProperties는 YAML의 계층형을 따라서 자동으로 카멜 케이스의 필드와 매칭되는 설정 값을 찾아 매핑을 진행한다. 스프링 프레임워크가 아닌 스프링 부트에서 지원을 하는 애너테이션이니 주의가 필요하다. 문자열을 이용한 하드코딩이 아니기 때문에 @Value보단 더 선호되는 애너테이션이라고 생각이 드는데, setter 메서드가 반드시 필요하다는 것이 아쉽다. 불변으로 생성할 수..
DB의 정보라던지 JWT의 내용이라던지 소스코드 외부적으로 값을 세팅해 줄 필요가 있을 경우 /resources 디렉토리 아래 .properties 혹은 .yaml에서 값을 읽어올 수 있다. 스프링 부트는 기본적으로 DB를 사용할 일이 있으면 application.yaml에서 DB 연결을 위한 값을 자동으로 설정한다. 이처럼 프레임워크의 흐름에 필요한 값을 넣기 위해 사용하는 경우도 있고, 개발자가 자체적으로 값을 소스코드 외부적으로 받아오도록 할 때 이러한 Properties들을 설정할 수 있는 방법은 여러가지가 있다.왜 Properties가 필요한가?우선 소스코드 외부적으로 왜 값을 넣어줄 필요가 있을지 생각을 해보자. 웹 서비스를 만들 땐 DB의 정보가 필요하다. 만약 팀원이 여러명 있다면, 각자의..
인재이
그냥 흔한 개발 블로그