전체 글 153

[Item2] 생성자에 매개변수가 많다면 빌더를 고려하라

클래스에 인스턴스를 만들기 위해서는 매개변수를 입력 받아 클래스를 생성해야한다 하지만 점점 많은 매개변수를 받게 될 경우 하나부터 N개의 매개변수에 대한 생성자를 각각 생성해주어야 하고 필요한 생성자를 골라서 생성해야한다. 이렇게 되면 코드상으로도 읽기 어려우며 코드의 양도 많아지게 된다. 점층적 생성자 패턴 - 위와 같은 생성자 생성 패턴을 점층적 생성자 패턴 이라고 하는데 점층적 생성자 패턴 사용 시 타입이 같은 매개변수가 연달아 있으면 매개변수의 순서를 잘못 설정하여 지정해줘도 컴파일러는 알아차리지 못하고 런타임 단계에서 이상한 동작을 하게되어 매개변수가 많을 경우 안좋은 점 이 있다. 자바빈즈 패턴 (JavaBeans Pattern) - 선택 매개변수가 많을 떄 활용하는 패턴으로 Setter를 구..

[Item1] 생성자 대신 정적 팩터리 메서드를 고려하라

정적 팩터리 메소드 (static factory method) 란? - 클래스의 인스턴스를 반환하는 단순한 정적 메서드 EX) 기본 타입인 boolean 값을 받아 Boolean 객체 참조로 변환하여 반환한다. public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 정적 팩터리 메소드의 장점 1. 이름을 가질 수 있다. - 생성자의 이름과 매개변수 만으로는 객체의 특성을 제대로 설명하지 못하지만, 정적 팩터리는 이름을 지정해 주어 해당 정적 메소드가 어떠한 역할을 해주는지 자세히 정의할 수 있다. 2. 호출될 때 마다 인스턴스를 새로 생성하지 않아도 된다. [Item 17 불변클래스 참고] - 미리 만들어 놓..

Thread 생명주기 및 주요 메서드

네트워킹은 스레드를 이용하여 소켓을 생성한다. -> Web Server에서 N개의 클라이언트에게 서비스를 제공해줄 때 스레드를 사용하여 서비스를 제공한다 (멀티 스레드) 스레드의 상태 6가지 (생명주기) - JVM이 TCB (Thread Controll Block ) 관리하는 곳을 통하여 Thread 정보를 관리 1. NEW - Thread를 생성 (실행할 준비는 안됨) 2. RUNNABLE - 실행 준비중 상태 혹은 실행중인 상태, JVM에서 RUNNABLE 상태인 스레드를 사용함 (start 메소드 호출) 3. WAITING - 대기 상태, wait() 메소드 호출 시 WATING 상태가 됨, notify() 메서드 호출 시 대기상태 스레드를 동기화 하여 재 시작 4. TIMED_WATING - 시간..

JAVA 2022.05.16

Socket Programming

소켓 (Socket) 이란? - 네트워크 상에서 수행되는 두 프로그램 간 [ (EX) Client -> Server ]의 양방향 통신 링크의 한쪽 끝 단을 의미한다. - 특정 포트 번호와 연결되어 있다 -> TCP에서 데이터를 보낼 응용 프로그램을 식별할 수 있다. - 서버 소켓과 클라이언트 소켓으로 분류 할 수 있다. • 통신 방식 - 서버 IP와 서버 Port를 가진 클라이언트 서버에서 서버 Port를 가진 Server Socket으로 접속 신호를 보낸다 서버 소켓은 또 다른 소켓을 생성하면서 클라이언트에서 요청을 보냈다 라는 인식을 하게 된다. - 서버 소켓은 클라이언트에서 정상적으로 접속이 되었는지 여부만 파악하고 새로 생성된 소켓에서 실제 데이터들이 통신 된다. - Clinet Socket ->..

JAVA 2022.05.10

Mac 터미널 원격 연결

1. 터미널에서 ssh 를 통한 원격 접속 -1 ) ssh [접속 서버 USER ID]@[접속 서버 HOST명 or IP] EX) ssh root@test.co.kr -2) ssh [접속 서버 USER ID]@[접속 서버 HOST명 or IP] EX) -p [포트번호] -> 포트를 변경해서 사용하는 경우, 보안상 취약 실행 순서 1. 기본 터미널 실행 (terminal.app) 2. 위에 적혀있는 원격 접속 명령어 실행 3. 원격 서버의 패스워드 입력 - 최초 연결 시 RSA키를 생성하고 연결을 계속 하겠냐는 메세지가 나옴 -> yes를 입력하여 연결을 허용함 4. 원격 성공 시 사용자와 도메인명이 같이 보이며 해당 서버로 터미널 정보가 바뀐다 5. 연결 종료는 exit 명령어 혹은 Ctrl+d 키를 입..

맥북 관련사항 2022.05.10

InetAddress 클래스

IP 주소를 다룰 수 있는 InetAddress 클래스 브로드캐스트 - 하나의 송신자가 여러 수신자에게 데이터를 전송하는 방식 유니캐스트 - 송신자와 수신자가 1대1로 대응이 되는 데이터 전송 방식 멀티캐스트 - 하나 이상의 송신자들이 하나 이상의 여러 수신자에게 데이터를 전송하는 방식 EX) 화상회의 InetAddress 내장 메소드 URL (Uniform Resource Location) - 인터넷에 존재하는 서버들의 자원에 접근할 수 있는 주소 https:// search.naver.com/ search.naver ?where=nexearch&sm=top_sug.pre 프로토콜 호스트명(포트) 파일명 쿼리 URL 클래스 내장 메서드 URL.openStream() 메서드를 통한 url를 통해 얻은 정..

JAVA 2022.05.05

클래스형 컴포넌트에서 Redux 정보 가져오기 (connect)

const mapStateToProps = state => { return { darkMode: state.darkMode } } // redux에 담겨 있는 state를 사용하기 위한 map 설정 const mapDispatchToProps = dispatch => { return { changeTheme: () => dispatch(this.props.changeTheme()) } } // redux에 담겨 있는 dispatch를 연결해주기 위한 map 설정 export default connect( mapStateToProps, mapDispatchToProps )(ContentItem) // 위에서 설정한 두개의 map을 연결하기 위한 connect 설정 참고 : https://react.vlpt..