Java

    상속보다 컴포지션을 사용해야하는 이유

    [Java] 컴포지션(Composition) 컴포지션 : 기존 클래스가 새로운 클래스의 구성요소가 되는 것 상속(Inheritance)의 단점을 커버할 수 있는 컴포지션에 대해 알아보자 우선 상속(Inheritance)이란, 하위 클래스가 상위 클래스의 특성을 재정의 한 것을 말한다. 부모 클래스의 메서드를 오버라이딩하여 자식에 맞게 재사용하는 등, 상당히 많이 쓰이는 개념이면서 활용도도 높다. 하지만 장점만 존재하는 것은 아니다. 상속을 제대로 사용하지 않으면 유연성을 해칠 수 있다. 구현 상속(클래스→클래스)의 단점 1) 캡슐화를 위반 2) 유연하지 못한 설계 3) 다중상속 불가능 오류의 예시 다음은, HashSet에 요소를 몇 번 삽입했는지 count 변수로 체크하여 출력하는 예제다. public ..

    [Java] 직렬화(Serialization)

    [Java] 직렬화(Serialization) 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference Type의 데이터들은 인스턴스를 전달 할 수 없다. 따라서, 이런 문제를 해결하기 위해선 주소값이 아닌 Byte 형태로 직렬화된 객체 데이터를 전달해야 한다. 직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서, 전송 및 저장이 가능한 데이터로 만들어주는 것이 바로 '직렬화(Serialization)'이라고 말할 수 있다. 직렬화 조..

    [Java] 컴파일 과정

    [Java] 컴파일 과정 자바를 많이 사용하기는 하지만, 막상 컴파일 과정을 설명하라하면 말문이 막힌다;; 면접에서도 가끔 나오는 주제이므로 정리해보자 HelloWorld.java 파일을 실행하기 위해 Run 버튼을 눌렀을 때 진행되는 과정은 아래와 같다. 1. HelloWorld.java가 javac.exe을 통해 컴파일 진행 2. HelloWorld.class가 생성됨 ( byte code ) → byte code는 반 기계어 상태로, 컴퓨터가 읽을 수 없다. 따라서 변환 과정이 필요함 3. HelloWorld.class를 java.exe로 실행 4. 클래스 로더를 통해 HelloWorld.class를 JVM으로 가져온다. (JVM은 현재 진행을 시도하는 OS에 맞게 변환시켜줌) 5. Byte Cod..

    [디자인 패턴] 어댑터(Adapter) 패턴

    어댑터 패턴용도 : 클래스를 바로 사용할 수 없는 경우가 있음 (다른 곳에서 개발했다거나, 수정할 수 없을 때) 중간에서 변환 역할을 해주는 클래스가 필요 → 어댑터 패턴사용 방법 : 상속호환되지 않은 인터페이스를 사용하는 클라이언트 그대로 활용 가능향후 인터페이스가 바뀌더라도, 변경 내역은 어댑터에 캡슐화 되므로 클라이언트 바뀔 필요X 클래스 다이어그램 아이폰의 이어폰을 생각해보자가장 흔한 이어폰 잭을 아이폰에 사용하려면, 잭 자체가 맞지 않는다.따라서 우리는 어댑터를 따로 구매해서 연결해야 이런 이어폰들을 사용할 수 있다 이처럼 어댑터는 필요로 하는 인터페이스로 바꿔주는 역할을 한다 이처럼 업체에서 제공한 클래스가 기존 시스템에 맞지 않으면?기존 시스템을 수정할 것이 아니라, 어댑터를 활용해 유연하게..

    [디자인 패턴] 유형 분류 및 패턴 정리

    디자인 패턴유형 분류Cretional Pattern객체 생성에 관련객체 생성 시, 유연성 높이고 코드의 유지보수에 도움Structural Pattern프로그램 구조 관련자료구조 or 인터페이스 등 프로그램 구조 설계에 활용Behavioral Pattern반복적으로 사용되는 객체들의 상호작용 패턴화 학습할 패턴어댑터(Adapter) 패턴프로토 타입(Prototype) 패턴싱글톤(Singleton) 패턴컴포지트(Composite) 패턴데코레이터(Decorator) 패턴퍼사드(Facade) 패턴프록시(Proxy) 패턴옵저버(Observer) 패턴커맨드(Command) 패턴책임 연쇄(Chain of Responsibility) 패턴중재자(Mediator) 패턴방문자(Visitor) 패턴팩토리 메소드(Factor..

    [Java] GUI를 활용한 직원 관리 프로그램

    [Java] GUI를 활용한 직원 관리 프로그램 해당 프로젝트 정보(Github) : 링크 목표 - Singleton 디자인 패턴을 활용한 안정적인 객체 생성- Client와 Server 사이에서 IP/Port 연결을 통해 원활한 소켓 통신 구현- 소켓 통신 시, 객체 단위 전달을 위한 직렬화(Serializable) 구현- Client 생성 시 Thread를 활용한 구현- 프로그램 시각화를 위한 GUI의 JFrame 활용 클래스 다이어그램 Employee직원 정보 객채 : 번호, 이름, 직책, 거주지 정보 CRUD를 위한 getter와 setter 생성 및 서버 출력에 필요한 toString 메소드 오버라이드 소켓에서 객체 단위 전송을 위한 직렬화(Serializable) 적용 IEmpMgr구현이 필요..

    [자바(java)/스프링(spring)] 면접 질문 모음

    README 자바, 스프링 면접 질문1. OOP가 뭐죠?2. 자바의 메모리 영역에 대해서 설명해보세요.3. 인터페이스가 뭐죠? 왜 사용하나요?4. 메모리 상수풀 영역에 대해 설명해보세요.5. jdbc가 무엇인가요?6. 직렬화란 무엇인가요 ?7. serialVersionUID를 선언해야 하는 이유는 뭔가요?8. 리플렉션이란 무엇인가요?9. 자바의 클래스 멤버 변수 초기화 순서에 대해 설명하세요10. Servlet과 JSP를 비교해서 설명하세요11. 제너릭이 무엇인가요?12. 컬렉션 클래스에서 제너릭을 사용하는 이유를 설명하세요13. pojo가 무엇인가요?14. 박싱과 언박싱에 대해 설명하세요15. 데드락이 무엇이고, 해결방법에 대해 설명해보세요16. 상속과 컴포지션(합성)의 차이에 대해서 설명해보세요17...

    [Java] 필수 개념 정리

    자바자바 특징객체 지향플랫폼 독립적간단함 (메모리 관리)분산 프로그래밍 지원멀티 스레드객체 지향 특징추상화캡슐화상속다형성기본형정수 타입: byte (1byte), short (2byte), int (4byte), long (8byte)부동소수점 타입: float (4byte) , double (8byte) 부울 타입: boolean (1byte) // true,false 두 가지 값만 표현 문자 데이터 타입: char (2byte)float에는 꼭 F 붙여야 함 float a = 10.2FArray배열 복사 : arraycopy메모리 공간스택 : 메소드 수행힙 : 객체 생성클래스 area : 클래스, static 정보 등가비지 컬렉션힙 영역(클래스 포함)에 생성된 객체들의 메모리를 관리하는 프로그램사용하..

    자바 - 데이터타입/기본문법

    자바 - 데이터타입/기본문법 1) primitive type 기본형논리형 : boolean (참/거짓)숫자형a. 정수형byte(1)short(2)int(4)long(8)char(2) : 글자 한개 저장 목적b. 실수형float(4)double(8)​ public class DatatypeTest { ​ public static void main(String[] args) { //논리형 boolean flag = true; // byte < short < int < long // float < double //정수형 byte b = 1; // 바이트는 -128~127까지만 저장 가능 int b2 = b + 1; // 자바에서 정수리터럴을 사용해서 연산할 때 그 값은 4byte에 저장됨 b = (byte) ..