분류 전체보기 33

[SPRINGBOOT] 좋아요 수 표현

CRUD 게시판을 구현하며 좋아요 기능을 추가하며 당연하지만, 놓치고 지나간 것을 정리하고자 글을 작성한다. 먼저, 아래는 좋아요 수를 나타내기 위해 처음 작성한 코드이다. @Entity @NoArgsConstructor @Getter public class Post { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @Column private long heartNum; @OneToMany(fetch = FetchType.LAZY, mappedBy = "post", orphanRemoval = true) private List heartList = new ArrayList(); @Builder public Post(String ..

JAVA(SPRINGBOOT) 2023.03.09

[JAVA] VECTOR

Vector란? 자바에서 제공했던 레거시 클래스 Collections 프레임워크가 포함되어 있지 않던 초기 자바 버전에서 정의한 인터페이스 현재는 재구성 및 설게 되어 Collections 프레임워크와 호환 Vector의 특징 필요에 따라 크기를 동적으로 조절할 수 있는 동적배열을 구현 인덱스를 이용해 배열에 액세스 가능 동기화 Vector vs ArrayList ArrayList와 같은 구조를 가지지만, 동기화 여부가 가장 큰 차이점이다. Vector는 동기화되기 때문에 멀티스레드 환경에서 안정성을 가지지만, ArrayList는 그렇지 못하다. 동기화로 인해 Vector에는 하나의 스레드만 접근할 수 있어, ArrayList보다 속도는 느리다. 그렇기 때문에 멀티스레드 환경에서는 ArrayList를 사..

JAVA(SPRINGBOOT) 2023.01.26

[DESIGN PATTERN] STRATEGY PATTERN

전략 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 전략이란, 어떤 목적을 달성하기 위해 일을 수행하는 방식 정도로 이해할 수 있다. 예제를 통해 전략패턴을 알아보자. public class Robot { private String name; public Robot(String name) { this.name = name; } public void move() { System.out.println("I can only walk"); } } 위와 같은 Robot 클래스가 있을 때, Robot은 걸어서 움직일 수 밖에 없다. 만약 Robot이 날 수도 있게 만들고 싶다면 어떻게 해야할까? public void move() { System.out.println("I can fly"); } 위와 ..

DESIGN PATTERN 2023.01.20

[JAVA] GENERIC PROGRAMMING

Generic Class (제네릭 클래스) 타입 파라미터를 한 개 이상 받는 클래스 public class Entry { private K key; private V value; public Entry(K key, V value) { this.key = key; this.value = value; } //Getter } // 제네릭 클래스 객체 생성시 생성자에서 타입 파라미터 생략 가능 // 타입 파라미터에 기본형 타입은 쓸 수 없다. ex) int Enrty enrty = new Enrty("A",3); Genegic Method (제네릭 메서드) 타입 파라미터를 받는 메서드 제네릭 메서드를 선언할 때는 타입 파라미터를 제어자와 반환 타입 사이에 둔다. public class Arrays { publi..

JAVA(SPRINGBOOT) 2022.12.22

[NETWORK] TCP/IP

TCP/IP Protocol Suite TCP와 IP 프로토콜을 주축으로한 통신 프로토콜 모음 TCP/IP의 계층 구조 (4계층) 애플리케이션 계층 - 전송 계층(TCP) - 네트워크 계층(IP) - 링크 계층 TCP(Transmission Control Protocol) : 전송 제어 프로토콜 한 기기에서 다른 기기로의 데이터 전송 담당 애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실히 전달 연결을 생성할 뿐 데이턴 전송은 IP에 위임 세그먼트(segment)라는 단위로 데이터를 관리 애플리케이션에 TCP헤더를 붙여 TCP 세그먼트 작성 하나의 세그먼트로 전송할 수 있는 최대 데이터 크기를 MSS(Maximum Segment Size) 연결형 프로토콜 / connection이라 불리는 가상..

CS/NETWORK 2022.12.21

[NETWORK] TCP 흐름제어 / 혼잡제어

TCP(Transmission Control Protocol) 전송 제어 프로토콜 TCP 통신이란 네트워크 통신에서 신뢰적인 연결방식 기본적으로 reliable network를 보장할 수 있도록 하는 프로토콜 network congestion avoidance algorithm을 사용 reliable network 보장의 문제 packet 손실 packet 순서 바뀜 네트워크 혼잡 receiver가 overload Flow Control (흐름제어) 수신측이 송신측보다 데이터 처리 속도가 느릴 때, 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법 receiver가 sender에게 자신의 상태를 피드백하여 Flow Control를 통해 receiver가 받는 packet 조절 Stop and..

CS/NETWORK 2022.12.19

[JAVA] 비교연산자 (==, equals)

Primitive Type(기본형)은 실제값을 스텍 메모리에 저장하기 때문에 == 을 이용해서 값을 비교할 수 있다. 하지만 기본형이 아닌 Reference Type(참조형)은 실제값을 저장하는 것이 아니라 주소값을 힙 메모리에 저장한다. 리터럴 방식을 사용하면 String constant pool에 값이 저장되었는지 확인하고 있다면 기존 주소값을 반환, 없으면 새로운 주소값은 반환한다. new 연산자를 이용하면 해당값을 새로운 주소값에 저장하여 주소값을 반환한다. 그렇기 때문에 ==을 통해서 비교하면 주소값을 비교하게되고 실제값이 같다고 해도 false를 반환할 수 있다. equals 메서드를 통해 주소값이 아닌 실제값을 비교해야 기대하는 결과를 얻을 수 있다. String a = "asdf"; //리..

JAVA(SPRINGBOOT) 2022.12.16

[NETWORK] OSI 7 LAYER (OSI 7계층)

OSI 7계층 개방형 시스템 상호 연결 모델의 표준(응용, 표현, 세션, 전송, 네트워크, 데이터링크, 물리) 모든 시스템들의 상호 연결에 문제가 없도록 표준을 정하여 통신이 일어나는 과정을 단계별로 알 수 있고, 이상이 생기면 그 단계만 수정할 수 있도록 해준다. 물리 계층(Physical Layer) 리피터, 케이블, 허브 등 데이터를 전기적인 신호로 변환해서 주고 받는 기능을 진행하는 공간 데이터를 전송하는 역할만 할 뿐 알고리즘, 오류 제어 기능이 없음 데이터링크 계층(Data-Link Layer) 브릿지, 스위치 등 데이터 단위 : 프레임(Frame) 물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와주는 역할(Point-To-Point) 안전한 정보 전달은 오류나 재전송 기능이 ..

CS/NETWORK 2022.12.16

[JAVA] REQULAR EXPRESSION(정규 표현식)

정규표현식 문자열 패턴을 지정하여 특정 패턴과 일치하는 문자열을 찾을 때 사용 . 단일 문자 .a.a는 Java와 일치 * 앞에 있는 구문이 0번 이상 반복 be+는 b, be, bee, bee에 일치 + 앞에 있는 구문이 1번 이상 반복 be+는 be, bee, bee에 일치 ? 앞에있는 구문이 선택적 (0번 또는 1번) es?는 e, es에 일치 | 선택 (oo|ee)는 ee나 oo에 일치 ^ 문자의 반전 (지정한 문자 외의 모든 문자) 정규표현식에 문자열이 일치하는지 확인하기 //정적 메서드 Pattern.matches(regex, input); //regex : 정규식, input : 비교할 문자열 //Matcher 생성 Pattern pattern = Pattern.compile(regex); ..

JAVA(SPRINGBOOT) 2022.12.16

[JAVA] EXCEPTION(예외처리)

예외처리의 필요성 오류를 감지하는 과정과 처리하는 과정을 분리함으로써 오류를 감지하고 처리하지 않을 경우를 없앤다. 예외 던지기 public String example(int a, int b) { int c = a - b; return "a가 b보다 " + c + "만큼 더 큽니다."; } 만약 example(1,2)를 호출한다면 올바른 결괏값을 얻을 수 없다. 따라서 예외 처리를 해주어야 한다. if (a b" ); 다음과 같이 throw를 통해 IllegalArgumentException 객체를 던질 수 있다. throw문이 실행되면 정상적인 실행 흐름은 즉시 중단된다. 검사 예외와 비검사 예외 검사 ..

JAVA(SPRINGBOOT) 2022.12.16