Java

중첩 클래스(Nested Class)중첩클래스란 클래스 내부에 선언한 클래스를 말하는데, 중첩 클래스를 사용하면 클래스의 멤버를 쉽게 사용할 수 있고 외부에는 중첩 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장접이 있다. 선언 위치에 따른 분류선언 위치객체 생성 조건멤버 클래스인스턴스 멤버 클래스class A {    class B { ... }}A 객체를 생성해야만 B 객체를 생성할 수 있음정적 멤버 클래스class A {    static class B { ... }}A 객체를 생성하지 않아도 B 객체를 생성할 수 있음로컬 클래스class A {    void method() {        class B { ... }    }}method가 실행할 때만 B 객체를 생성할 수 있음 인스..
인터페이스 역할인터페이스는 사전적인 의미로 두 장치를 연결하는 '접속기'를 말한다.  인터페이스를 사용하는 이유단순하게 객체 A가 B를 호출하게 구현하는게 아니라 중간에 인터페이스를 두는 이유는 뭘까? 인터페이스는 다형성(Polymorphism)과 유연한 설계를 가능하게 해주는 도구이다. 다형성을 구현하기 위해다형성(Polymorphism)이란?하나의 타입(부모/인터페이스)으로 여러 형태(구현 클래스)를 표현할 수 있는 성질즉, 같은 메소드 호출인데 객체에 따라 다르게 동작하는 것  인터페이스를 구현하면 다양한 구현체를 같은 타입으로 다룰 수 있다. 예제처럼, 객체 A가 인터페이스의 메소드를 사용하게 구현한다면 객체 A는 객체 B가 객체 C로 변경되더라도 객체를 변경하는 추가적인 작업이 필요하지 않게 된..
if문 중괄호를 생략하면?if문을 작성할 때, 중괄호{} 블록 내에 실행문이 하나밖에 없다면 중괄호를 생략할 수 있다.ealry return이나 단순 프린트(혹은 로깅)를 할 때 유용하게 사용되곤 하는데, 제대로 알지 못하고 사용하면 버그의 원인이 될 수 있다. boolean isTrue = true;// good caseif (isTrue) System.out.print("HELLO WORLD");// bad caseif (!isTrue) System.out.println("It's false!"); System.out.println("BYE WORLD"); 첫번째 케이스와 같이 if문에 실행문이 하나인 경우 "HELLO WORLD"를 출력하게 된다.하지만 두번째 케이스의 경우 의도와 다르게 "B..
부호/증감 연산자부호 연산자연산식설명+피연산자피연산자의 부호 유지-피연산자피연산자의 부호 변경 정수 타입(byte, short, int) 연산의 결과는 int 타입이다. 부호를 변경하는 것도 연산이므로 int 타입 변수에 대입해야한다. 증감 연산자연산식설명++피연산자피연산자의 값을 1 증가시킴--피연산자피연산자의 값을 1 감소시킴피연산자++다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴피연산자--다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴  ❓for문 증감연산자는 왜 뒤에 ++이 붙을까?for문의 증감식은 블록 실행 후 루프가 "다시 조건식으로 돌아가기 전에" i값을 증감 시키는 역할을 한다.즉, 블록 실행 후 i를 증감시켜 다음 루프를 준비하는 것이다...만 for문 증감식에서 후위(i+..
변수 선언변수하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름자바의 변수는 처음에 선언된 타입 형태로만 저장할 수 있다. 변수명 규칙첫번째 글자는 문자여야한다. 특수문자는 '$', '_' 만 포함할 수 있다.중간부터는 숫자 및 허용된 특수문자를 사용할 수 있다.첫 문자는 소문자로 시작하되, CamelCase로 작성한다. 변수 선언과 초기화변수 선언저장되는 값의 타입과 이름만 결정한다. 메모리에는 할당되지 않는 상태int num; 변수 초기화변수에 최초로 값을 대입한다. 변수를 선언함과 동시에 대입할 수 있다.초기화 하지 않은 변수를 연산식에 대입할 경우 컴파일 에러가 발생한다.int num; // 변수 선언int value = 10; // 변수 초기화int result = num + value; ..
프로그래밍 언어와 자바Java의 특징모든 운영체제에서 실행 가능JVM(Java Virtual Machine) 위에서 실행되는 자바는 OS와 무관하게 모든 플랫폼에서 동작한다.객체 지향 프로그래밍(Object-Oriented Programming, OOP)메모리 자동 정리자바는 GC(Garbage Collection)가 메모리를 자동으로 관리해준다멀티스레드 지원무료 라이브러리 풍부 다른 언어와의 비교대표적으로 많이 사용되는 C++, Python과 비교해보자비교 항목JavaC++Python실행 환경JVM 위에서 실행OS에서 직접 컴파일하여 실행인터프리터 기반메모리 관리자동수동자동속도중간빠름느림난이도중간상대적으로 복잡쉬움주요 사용 분야기업용 백엔드, 모바일(Android), 금융 시스템 등게임, 임베디스 시스..
· Spring boot
들어가며 회사에서 개발 중인 서비스가 통신하기 위한 서버가 특정 서버에서만 접근 가능한 상황이었다. 백그라운드에서 동작하는 (유저가 접근하지 않아도 되는) 어플리케이션은 그 특정 서버에 서비스를 띄워서 서로 통신이 가능한 방식을 사용하고 있었지만 개발 중인 서비스가 동작 중인 서버는 별도의 서버로 분리가 되어있었고, 이 서버는 정책상 특정 서버에서 인바운드가 막혀있는 상태였다. 조금 복잡한데 아무튼 개발 중 서비스 -> 타겟 서버로의 직접 접근이 안된다는 말이다. 이 문제를 해결하기 위해서는 타겟 서버로의 접속을 우회하는 방식을 사용해야하는데 이걸 SSH 터널링이라고 한다. 이번에는 SSH 터널링의 개념과 필요성, 구현 예시에 대해 작성해보고자 한다. SSH (Secure Shell) 시큐어 셸(Secu..
· Spring boot
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify JSON.stringify() - JavaScript | MDN JSON.stringify() 메서드는 JavaScript 값이나 객체를 JSON 문자열로 변환합니다. 선택적으로, replacer를 함수로 전달할 경우 변환 전 값을 변형할 수 있고, 배열로 전달할 경우 지정한 속성만 결과에 포함 developer.mozilla.org 공공 api에서 가져온 유기동물 객체를 그대로 서버에 넘겨줘야하는 일이 생겼다. 이걸 Object 그대로 서버에 넘겨준 후 서버에서 파싱하는 방법이 있지만 이번에는 클라이언트단에서 JSON형태로 만들어 보내주기..
· CS
REST(REpresentational State Transfer)란? HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식 즉, REST란 어떤 자원에 대해 CRUD연산을 수행하기 위해 URI(Resource)로 요청을 보내는 것으로, POST / GET / PUT / DELETE / PATCH 등의 방식(Method)를 사용하여 요청을 보내며 요청을 위한 자원은 특정한 형태(Representation of Resource)으로 표현된다. 이러한 REST기반의 API를 웹으로 구현한 것이 REST API이다. REST의 구성요소 자원 (Resource) - URI 서버는 고유한 ID를 가지는 Resource를 가지고 있으며, 클라이언트..
· JAVA/JAVA
싱글톤 패턴(Singleton Pattern)이란? 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴을 의미한다. 즉, 인스턴스가 오직 1개만 생성되어야 하는 경우에, 클래스에 하나의 객체만을 생성해 이후에 호출된 곳에서는 생성된 객체를 반환하여 프로그램 전반에서 하나의 인스턴스만을 사용하게 하는 패턴이다. 싱글톤 패턴 생성 규칙 https://velog.io/@ednadev/%EC%9E%90%EB%B0%94-static-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4singleton-pattern 자바 static - 싱글톤 패턴(singleton pattern) . . . . . static은 '클래스의', ..