티스토리

PHM, who became a Programmer.
검색하기

블로그 홈

PHM, who became a Programmer.

hyeonmin.tistory.com/m

NO SILVER BULLET

구독자
0
방명록 방문하기

주요 글 목록

  • [IT 엔지니어를 위한 네트워크 입문] - 2장 네트워크 연결과 구성 요소 2장 네트워크 연결과 구성 요소 2.1 네트워크 연결 구분 네트워크의 규모와 관리 범위 - LAN (Local Area Network) : 사용자 내부 네트워크 - MAN (Metro Area Network) : 한 도시 정도를 연결하고 관리하는 네트워크 - WAN (Wide Area Network) : 멀리 떨어진 LAN을 연결해주는 네트워크 MAN - 수~수십 km 범위의 한 도시를 네트워크로 연결하는 개념 2.1.1 LAN LAN - Local Area Network의 약자로 홈 네트워크용과 사무실용 네트워크 처럼 비교적 소규모의 네트워크를 말한다. 2.1.2 WAN WAN - Wide Area Network의 약자로 먼 거리에 있는 네트워크를 연결하기 위해 사용한다. - 멀리 떨어진 LAN을 서로.. 공감수 0 댓글수 0 2024. 4. 22.
  • [IT 엔지니어를 위한 네트워크 입문] - 1장 네트워크 시작하기 1장 네트워크 시작하기 1.1 네트워크 구성도 살펴보기 1.1.1 홈 네트워크 유선연결 - 유선 랜 카드 (이더넷 랜 카드 : 일반적으로 보드에 내장됨) - 랜 케이블 (일반적으로 랜선이라고 부름) - 유선 연결에는 위의 2가지가 필요하다. 1.1.2 데이터 센서 네트워크 데이터 센터 구성 - 옛날 : 3계층 구성이 일반적 · Core - Aggregation - Access - 현재 : 2계층 구성으로 변경 · 가상화 기술과 높은 대역폭을 요구하는 스케일 아웃(Scale-Out) 기반의 애플리케이션의 등장으로 인해 · Spine - Leaf 1.2 프로토콜 프로토콜 - 규정이나 규약과 관련된 내용을 언급할 때 프로토콜이라는 용어를 사용한다. - 네트워크에서도 통신할 때의 규약을 프로토콜이라는 용어를 사.. 공감수 0 댓글수 0 2024. 4. 21.
  • AWS 입문편 1. AWS - IAM - 유저를 관리하고 접근 레벨 및 권한에 대한 관리 2. AWS - EC2 - EBS (Elastic Block Storage) : EC2를 사용하기 위해 EBS라는 디스크 볼륨을 요구한다. ㆍ저장 공간이 생성되어지며 EC2 인스턴스에 부착된다. ㆍ디스크 볼륨 위에 File System이 생성된다. ㆍEBS는 특정 Availablility Zone에 생성된다. - ELB (Elastic Load Balancers) : 하나의 서버로 트래픽이 몰리는 병목현상 방지 ㆍ수많은 서버의 흐름을 균형있게 흘려보내는데 중추적인 역할을 함 ㆍ하나의 서버로 traffic이 몰리는 병목현상 방지 ㆍTraffic의 흐름을 Unhealthy instance -> healthy instance 로 - R.. 공감수 0 댓글수 0 2024. 2. 15.
  • 코틀린 고급편 - 제네릭 1. 제네릭과 타입 파라미터 fun main() { /** * example01 */ val cage = Cage() cage.put(Carp("잉어")) // val carp: Carp = cage.getFirst() // Error: Type Mismatch // val carp: Carp = cage.getFirst() as Carp // 만약에 넣은게 금붕어였다면?! -> 런타임 에러 // Safe Type Casting과 Elvis Operator val carp: Carp = cage.getFirst() as? Carp?: throw IllegalArgumentException() // generic 활용 val cage2 = Cage2() cage2.put(Carp("잉어")) val car.. 공감수 0 댓글수 0 2023. 12. 19.
  • Apache Kafka for beginner 아파치 카프카 기초 - 카프카는 Source Application(클릭로그, 결제로그) 과 Taget Application(로그적제, 로그처리)의 커플링을 약하게 하기 위해 등장! - Source Application의 데이터 포맷은 거의 제한이 없다. (json, csv etc..) - 카프카는 위와 그림같이 아주 유연한 큐역할을 한다. - 서버이슈 등에서도 데이터 손실없이 복구할 수 있다. - 낮은 지연과 높은 처리량을 통해서 아주 효과적으로 데이터를 많이 처리할 수 있다. 토픽이란? - 데이터가 들어갈 수 있는 공간 - 하나의 토픽은 여러개의 파티션을 구성될 수 있다. ㆍConsumer는 오래된 파티션순으로 가져간다. (record들을 가져가도 데이터가 삭제되지는 않는다.) - 파티션이 2개이상이라.. 공감수 0 댓글수 0 2023. 11. 27.
  • spring-batch start (Spring batch 5.1.0) 배치 작업이란? - 특정 주기마다 데이터를 처리하는 작업! - 예시 ㆍ이메일 쿠폰 발송 ㆍ가맹점 정산 ㆍ거래 명세서 생성 ㆍ추천 시스템 데이터 작업 스프링 배치의 구조 - 스프링 배치로 작업이 필요한 이유 ㆍ풍부한 기능 ㆍ일관성된 코드 ㆍ기존 서비스가 스프링 프레임워크로 되어 있는 경우 호환가능 - JobRepository : 배치가 수행될 때 수행되는 메타 데이터를 관리하고 시작시간, 종료시간, job의 상태 등 배치 수행 관련 데이터들을 저장한다. - JobLauncher : 잡을 실행시켜주는 역할 - Job : 하나의 배치 작업 Hello World 띄우기! (spring-batch 5.x 버전) 1. Deprecated ㆍJobBuilderFactory ㆍStepBuilderFactory ㆍJob.. 공감수 0 댓글수 0 2023. 11. 26.
  • ElasticSearch Essential ElasticSearch 소개 - ElasticSearch란 Lucene 기반의 오픈 소스 검색엔진 ㆍJSON 기반의 문서를 저장하고 검색할 수 있으며 분석 작업도 가능하다. - 준실시간 검색 시스템 ㆍ실시간이라고 생각될 만큼 색인된 데이터가 빠르게 검색된다. - 고가용성을 위한 클러스터 구성 ㆍ한 대 이상의 노드로 클러스터를 구성하여 높은 수준의 안정성을 달성하고 부하 분산이 가능하다. - 동적 스키마 생성 ㆍ입력될 데이터들에 대해 미리 스키마를 정의하지 않아도 동적으로 스키마 생성이 가능하다. - Rest API 기반의 인터페이스 ㆍRest API 기반의 인터페이스를 제공하여 비교적 사용을 위한 진입 장벽이 낮다. 클러스터와 노드 이해하기 - 클러스터 : 컴퓨터 클러스터는 여러 대의 컴퓨터들이 연결되.. 공감수 0 댓글수 0 2023. 11. 23.
  • ELK 스택 엘라스틱서치 ( ElasticSearch ) ㆍRDB일 때는 document를 조회 후 내부 속성들을 조회하여 체크해야한다. ㆍ엘라스틱서치는 text만 조회하여 document를 가져오기에 더 빠르게 검색할 수 있다. Elastic Search Relational DB Index Database Type Table Document Row Field Column Mapping Schema Elastic Search Relational DB GET Select PUT Update POST Insert DELETE Delete - 엘라스틱서치 매핑 ㆍ카바나 시각화할 때 도움이 된다. - Metric Aggregation : 산술 조합 (max, min, avg 등등) - Bucket Aggregation : .. 공감수 0 댓글수 0 2023. 11. 18.
  • MongoDB with Spring Boot MongoDB 란? - 문서 기반 NoSQL 데이터베이스 - Json 형식으로 데이터를 저장한다. (BSON) SQL MongoDB Database Database Table Collection Column Field Row Document Foreign Key Sub Document(Reference) 설치 brew tap mongodb/brew brew update brew install mongodb-community@6.0 brew install mongodb-community-shell - 시작 brew services start mongodb-community@6.0 ㆍlocalhost:27017 에서 확인 가능 - 정지 brew services stop mongodb-community@6.0.. 공감수 0 댓글수 0 2023. 11. 13.
  • 도커 정리 Docker 란? : 컨테이너 기반의 가상화 플랫폼 Container 란? : 응용 프로그램과 그 의존성을 격리된 환경에 묶어 동작할 수 있도록 하는 가상화 단위 Docker vs Virtual Machines Docker Container Virtual Machines - 운영체제와 시스템에 미치는 영향이 적다. - 빠르다. 최소한의 디스크 공간을 사용한다. - 공유, 재구축 및 배포하는 것이 매우 쉽다. - 앱에 필요한 모든 것을 캡슐화한다 - 운영 체제에 많은 영향을 미친다. - 속도가 느리고, 디스크 공간을 더 많이 차지하는 경향이 있다. - 공유, 재구축 및 배포가 도커보다 까다롭다. - 컴퓨터 전체를 캡슐화한다. (완전한 운영체제) * Docker Engine : 도커를 실행하는데 필요한 Li.. 공감수 0 댓글수 0 2023. 11. 10.
  • 아이템33. 타입 안전 이종 컨테이너를 고려하라. 핵심정리 - 타입 토큰을 사용한 타입 안전 이종 컨테이너 -타입 안전 이종 컨테이너: 한 타입의 객체만 담을 수 있는 컨테이너가 아니라 여러 다른 타입 (이종)을 담을 수 있는 타입 안전한 컨테이너. - 타입 토큰: String.class 또는 Class - 타입 안전 이종 컨테이너 구현 방법: 컨테이너가 아니라 "키"를 매개변수화 하라! public class Favorites { private Map .class 도 활용가능하다! public class Favorites2 { private final Map annotationType = null; // 비한정적 타입 토큰 try { annotationType = Class.forName(annotationTypeName); } catch (Excep.. 공감수 0 댓글수 0 2023. 11. 9.
  • EC2 + Docker + Docker hub 애플리케이션 배포 로컬에서 - 내 애플리케이션에 Dockerfile 생성 및 설정 - docker hub 로그인 docker login -u [username] - docker image 생성 및 확인 # 기본 커맨드 # docker build -t [dockerHub ID]/[이미지명]:[태그명] [DockerFile위치] # 태그 지정X 시 :latest 지정됨 $docker build --platform amd64 -t [dockerHub ID]/[이미지명] . docker images - docker hub push # Docker Hub Push #docker push [DockerHub ID]/[image 파일명] $docker push minits/devops_test - docker desktop 에서 확인.. 공감수 0 댓글수 0 2023. 11. 6.
  • AWS - EC2만으로 애플리케이션 배포 EC2 인스턴스 생성 mv ~/Downloads/devops_test.pem ~/.ssh/ chmod 600 devops_test.pem - 파일 이동 및 권한 변경 EC2 접속 ssh -i ~/.ssh/devops_test.pem ec2-user@퍼블릭 IPv4 주소 - ec2-user 는 기본 계정 AWS EC2에 파일 전송하기 - scp & rsync 사용해서 파일이동 가능 - scp를 사용 (로컬에서 원격으로 파일전송) scp -i ~/.ssh/devops_test.pem jar파일경로 ec2-user@퍼블릭IPv4주소:/home/ec2-user - ex) scp -i '펨키' '목적지주소' '이동시킬로컬주소' EC2에 애플리케이션 띄우기 sudo amazon-linux-extras install.. 공감수 0 댓글수 0 2023. 11. 6.
  • Jenkins and CI/CD 젠킨스란? - 자바로 작성된 오픈 소스 지속적 통합 및 지속적 제공 도구 - 소프트웨어 프로젝트를 구축하고, 제공하는 데 사용되는 자동화 서버 CI/CD 란? - 지속적 통합, 즉 CI는 모든 개발자의 작업 복사본을 공유된 메인라인으로 하루에 몇 번식 병합하는 소프트웨어 엔지니어링 작업 방식이다. - 지속적 제공, CD는 팀이 소프트웨어를 짧은 주기로 만들어 소프트웨어가 언제든지 안정적으로 출시할 수 있는 소프트웨어 엔지니어링 접근법입니다. - 젠킨스는 소프트웨어를 짧은 주기로 출시하는 데 큰 도움을 줄 수 있습니다. - 실제로 CI/CD는 자동화된 빌드와 테스트를 진행하여 작업을 검증하고 게시하는 것을 의미한다. docker 란? - 가장 보편적인 컨테이너 소프트웨어 - docker engine : 도.. 공감수 0 댓글수 0 2023. 11. 6.
  • 아이템 32. 제네릭과 가변인수를 함께 쓸 때는 신중하라. 핵심정리 - 제네릭 가변인수 배열에 값을 저장하는 것은 안전하지 않다. ㆍ힙 오염이 발생할 수 있다 (컴파일 경고 발생) ㆍ자바7에 추가된 @SafeVarargs 애노테이션을 사용할 수 있다. static void dangerous(List... stringLists) { // List[] myList = new ArrayList[10]; // 컴파일러가 허용하지 않는다! List intList = List.of(42); Object[] objects = stringLists; objects[0] = intList; // 힙 오염 발생 String s = stringLists[0].get(0); // ClassCastException } @SafeVarargs // 가변인자는 안전하게 사용되고 있다. s.. 공감수 0 댓글수 0 2023. 11. 5.
  • 아이템31. 한정적 와일드카드를 사용해 API 유연성을 높이라 핵심정리 - Chooser와 Union API 개선 PECS : Producer-Extends, Consumer-Super - Producer-Extends ㆍObject의 컬렉션 Number나 Integer를 넣을 수 있다. ㆍNumber의 컬렉션에 Integer를 넣을 수 있다. - Consumer-Super ㆍInteger의 컬렉션의 객체를 꺼내서 Number의 컬렉션에 담을 수 있다. ㆍNumber나 Integer의 컬렉션의 객체를 꺼내서 Object의 컬렉션에 담을 수 있다. - 예시) // 코드 31-2 E 생산자(producer) 매개변수에 와일드카드 타입 적용 (182쪽) public void pushAll(Iterable list, int i, int j) { list.set(i, lis.. 공감수 0 댓글수 0 2023. 10. 31.
  • 켄트백의 테스트주도개발 후기 - 이 책을 읽기 전에 '테스트 주도 개발 시작하기' 라는 책을 먼저 읽었다. 만약에 이 책을 먼저 읽을려고 한다면 나는 테스트 주도 개발 시작하기라는 책을 더 추천한다. - 테스트 코드를 어느 정도 알고 나서 읽으면 좋겠다는 생각이 들었다. - 글귀에서 여러 좋은 조언을 얻었다. 테스트 코드 적으로는 다른 강의나 책들을 읽어서 그런지 확 와닫는게 없었다. 그래서 글귀 몇 개를 남긴다. 개발자로서 어려운 상황에 어떻게 맞설 것인가? - 불확실한 상태로 있는 대신, 가능하면 재빨리 구체적인 학습을 하기 시작한다. - 침묵을 지키는 대신, 좀더 분명하게 커뮤니케이션한다. - 피드백을 회피하는 대신, 도움이 되고 구체적인 피드백을 찾는다. - (자신의 나쁜 성깔은 직접 해결해야 한다.) - 테스트 주도 .. 공감수 0 댓글수 0 2023. 10. 29.
  • Testing Spring Boot App Repository Layer @DataJpaTest - 저장소 계층만 테스트하기 위해 사용 - 내장된 메모리에 자동으로 구성 - Spring Data JPA 리포지토리 및 JPA 관련 테스트할 수 있다. Service Layer @ExtendWith(MockitoExtension.class) - JUnit 5와 Mockito를 통합하여 테스트를 작성하고 실행할 수 있도록 도와준다. @Mock - 테스트 대상 클래스에서 다른 클래스 또는 의존성 객체를 대신하는 모의 객체를 생성한다. - 즉, 테스트 대상 클래스 내에서 특정 메서드를 호출하거나 특정 객체를 사용할 때, 이를 실제 객체 대신 모의 객체가 대신 동작한다. @InjectMocks - 테스트 대상 클래스에 @Mock 으로 생성된 모의 객체를 주입.. 공감수 0 댓글수 0 2023. 10. 27.
  • ERD 정리 관계선의 종류 실선(Identifying) : 식별관계 - 부모테이블의 PK가 자식테이블의 FK/PK가 되는 경우 - 부모가 있어야 자식이 생기는 경우 - 부모 자식 관계에서 자식이 부모의 키를 외래키로 참조 점선(Non-Identifying) : 비식별관계 - 부모테이블의 PK가 자식테이블의 일반속성이 되는 경우 - 부모가 없어도 자식이 생기는 경우 - 부모 자식 관계에서 자식이 부모의 키를 일반 속성으로 참조 항목 식별자 관계 비식별자 관계 목적 강한 연결관계 표현 약한 연결관계 표현 자식 주식별자 영향 자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨 표기법 실선 표현 점선 표현 연결 고려사항 - 반드시 부모엔티티 종속 - 자식 주식별자 구성에 부모 주식별자 포함 필요 - 상속받은 주식별자 속.. 공감수 0 댓글수 0 2023. 10. 15.
  • 테스트 주도 개발 시작하기 - chapter5 ~ chapter7 5. JUnit5 기초 5-1. JUnit 모듈 구성 - JUnit5의 구성 요소 ㆍJUnit 플랫폼 : 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API 제공 ㆍJUnit 주피터(Jupiter) : JUnit5를 위한 테스트 API와 실행 엔진을 제공한다. ㆍJUnit 빈티지(Vintage) : JUnit3과 4로 작성된 테스트를 JUnit5 플랫폼에서 실행하기 위한 모듈을 제공한다. 5-2. @Test 애노테이션과 테스트 메서드 - JUnit 코드의 기본 구조는 간단하다. 테스트로 사용할 클래스를 만들고 @Test 애노테이션을 메서드에 붙이기만 하면 된다. - JUnit의 Assertions 클래스는 검증하기 위한 목적의 다양한 정적 메서드를 제공한다. 5-3. 주요 단언 메서드 -.. 공감수 0 댓글수 0 2023. 9. 30.
  • 테스트 주도 개발 시작하기 - chapter2 ~ chapter4 2. TDD 시작 2-1. TDD 란? - 구현을 먼저하고 나중에 테스트하는 것이 아니라, 먼저 테스트를 하고 그다음에 구현한다. - 즉, TDD로 개발할 때 먼저 해야 할 것은 기능을 검증하는 테스트 코드를 작성하는 것이다. * src/test/java 소스 폴더는 배포 대상이 아니므로 src/test/java 폴더에 코드를 만들면 완성되지 않은 코드가 배포되는 것을 방지하는 효과가 있다. 2-2. TDD 예: 암호 검사기 2-3. TDD 흐름 1. 테스트가 개발을 주도 2. 지속적인 코드 정리 3. 빠른 피드백 3. 테스트 코드 작성 순서 3-1. 테스트 코드 작성 순서 - 구현하기 쉬운 테스트부터 시작하기 - 예외 상황을 먼저 테스트해야 하는 이유 ㆍ예외 상황을 전혀 고려하지 않은 코드에 예외 상황.. 공감수 0 댓글수 0 2023. 9. 30.
  • 아이템29 & 아이템30 아이템29. 핵심 정리 - 이왕이면 제네릭 타입으로 만들라 - 배열을 사용하는 코드를 제네릭으로 만들 때 해결책 두 가지 - 첫번째 방법 : 제네릭 배열(E[]) 대신에 Object 배열을 생성한 뒤에 제네릭 배열로 형변환한다. ㆍ형변환을 배열 생성시 한 번만 한다. ㆍ가독성이 좋다. ㆍ힙 오염이 발생할 수 있다. - 두번째 방법 : 제네릭 배열 대신에 Object 배열을 사용하고, 배열이 반환한 원소를 E로 형변환한다. ㆍ원소를 읽을 때마다 형변환을 해줘야 한다. 아이템29. 완벽 공략 - 한정적 타입 매개 변수 Bounded Type Parameters - 매개변수화 타입을 특정한 타입으로 한정짓고 싶을 때 사용할 수 있다. ㆍ, 선언할 수 있는 제네릭 타입을 Number를 상속(extends)했거나.. 공감수 0 댓글수 0 2023. 9. 28.
  • 아이템28. 배열보다는 리스트를 사용하라 핵심 정리1 - 배열과 제네릭은 잘 어울리지 않는다. - 배열은 공변(covariant), 제네릭은 불공변 - 배열은 실체화(reify) 되지만, 제네릭은 실체화 되지 않는다. (소거) ㆍ제네릭은 컴파일할 때 타입이 사라진다. - new Generic[배열] 은 컴파일 할 수 없다. - 제네릭 소거 : 원소의 타입은 컴파일 타임에만 검사하며 런타임에는 알 수 없다. public static void main(String[] args) { // 공변 : 같이 변한다. Object[] anything = new String[10]; anything[0] = 1; // 잘못된 동작이지만 컴파일러가 잡지 못한다. - 런타임 에러 // 불공변 : 같이 변하지 않는다. List names = new ArrayLis.. 공감수 0 댓글수 0 2023. 9. 23.
  • 아이템 27. 비검사 경고를 제거하라 핵심 정리 - "비검사 (unchecked) 경고" 란? ㆍ컴파일러가 타입 안정성을 확인하는데 필요한 정보가 충분치 않을 때 발생시키는 경고 public static void main(String[] args) { Set names = new HashSet(); Set strings = new HashSet(); } - 할 수 있는 한 모든 비검사 경고를 제거하라. - 경고를 제거할 수 없지만 안전하다고 확신한다면 @SuppressWarnings("unchecked") 애노테이션을 달아 경고를 숨기자 - @SuppressWarnings 애노테이션은 항상 가능한 한 좁은 범위에 적용하자. - @SuppressWarnings("unchecked") 애노테이션을 사용할 때면 그 경고를 무시해도 안전한 이유를 .. 공감수 0 댓글수 0 2023. 9. 21.
  • 아이템26. 로 타입은 사용하지 말라. 핵심 정리 - 제네릭 용어 정리 - 로 타입 : List - 제네릭 타입 : List - 매개변수화 타입 : List - 타입 매개변수 : E - 실제 타입 매개변수 : String - 한정적 타입 매개변수 : List - 비한정적 와일드카드 타입 : Class ㆍ아무런 타입이나 다 받는다. - 한정적 와일드카드 타입 : Class의 차이는? ㆍ 한종류를 다루는 Set ㆍ와일드 카드 시 add라는 함수로 값을 넣을 수 없다. (null은 가능) -> 안전성 확보 public class Numbers { static int numElementsInCommon(Set s1, Set s2) { // 해당 컬렉션에 아무거나 넣을 수 있다. int result = 0; for (Object o1 : s1) { i.. 공감수 0 댓글수 0 2023. 9. 18.
  • 코테 정리 및 공부 기본 문법 - 진수 & 알파벳과 정수 # 16진수 변환 int(a, 16) # 알파벳의 정수값 ord(x) # 정수의 알파벳 값 chr(x) - 반올림 값 print( format(x, ".2f") ) - 최대공약수와 최소공배수 import math # 최대공약수 math.gcd(a,b) # 최소공배수 (a * b) // math.gcd(a,b) - i 부터 j 까지의 원소를 역순으로 변경 my_list[i:j+1] = reversed(my_list[i:j+1]) - exception 처리 try: # ... except: # ... - 삼항 (true logic) if (조건문) else (false logic) - replace 키워드 ( 재저장해야한다 ) # 공백제거 replaced_a = a.re.. 공감수 0 댓글수 0 2023. 9. 11.
  • 아이템 22 & 아이템 23 & 아이템 24 & 아이템 25 아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라. 핵심 정리 - 상수를 정의하는 용도로 인터페이스를 사용하지 말 것! ㆍ클래스 내부에서 사용할 상수는 내부 구현에 해당한다. ㆍ내부 구현을 클래스의 API로 노출하는 행위가 된다. ㆍ클라이언트에 혼란을 준다. public class MyClass implements PhysicalConstants{ public static void main(String[] args) { System.out.println(PhysicalConstants.ELECTRON_MASS); System.out.println(BOLTZMANN_CONTANT); // 상속 시 위와 같이 사용 가능 - 인터페이스의 의도(타입 정의) 오염 } } - 상수를 정의하는 방법 ㆍ특정.. 공감수 0 댓글수 0 2023. 9. 7.
  • 아이템21. 인터페이스는 구현하는 쪽에서 생각해 설계하라. 핵심 정리 - 기존 인터페이스에 디폴트 메서드 구현을 추가하는 것은 위험한 일이다. ▷ ex) collection의 removeIf - synchronized 관련한 코드가 없기에 멀티쓰레드 환경에서 안전 X ㆍ디폴트 메서드는 구현 클래스에 대해 아무것도 모른 채 합의 없이 무작정 "삽입" 될 뿐이다. ㆍ디폴트 메서드는 기존 구현체에 런타임 오류를 일으킬 수 있다. public class SubClass extends SuperClass implements MarketInterface { public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.hello(); // SuperClass의 hello는 priva.. 공감수 0 댓글수 0 2023. 9. 5.
  • 아이템20. 추상 클래스보다 인터페이스를 우선하라. 핵심 정리 - 인터페이스의 장점 - 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있다. (완벽 공략 3) public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int year); void setDateAndTime(int day, int month, int year, int hour, int minute, int second); LocalDateTime getLocalDateTime(); static ZoneId getZonedId(String zoneString) { try { return ZoneId.of(zoneString); } catch (Dat.. 공감수 0 댓글수 0 2023. 8. 31.
  • 아이템19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. 핵심 정리 - 상속용 클래스는 내부 구현을 문서로 남겨야 한다. ㆍ@implSpec 을 사용할 수 있다. javadoc -d 경로 -tag "implSpec:a:Implementation Reqirements:" - 내부 동작 중간에 끼어들 수 있는 훅(hook)을 잘 선별하여 protected 메서드로 공개해야 한다. - 상속용으로 설계한 클래스는 배포 전에 반드시 하위 클래스를 만들어 검증해야 한다. - 상속용 클래스의 생성자는 재정의 가능한 메서드를 호출해서는 안된다. ㆍCloneable(아이템 13)과 Serializable(아이템 86)을 구현할 때 조심해야 한다. - 상속용으로 설계한 클래스가 아니라면 상속을 금지한다. ㆍfinal 클래스 또는 private 생성자 공감수 0 댓글수 0 2023. 8. 30.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.