Java

    Java의 다형성은 어떻게 동작하는가?

    Java의 다형성은 어떻게 동작하는가?

    다형성은 어떻게 동작하는가? 다형성은 도대체 어떻게 동작하는 것일까요? 자식 객체를 부모 타입의 레퍼런스 변수에 대입하면, 어떻게 자식의 오버라이딩된 메서드가 호출되는 걸까요? 자바의 다형성을 설명하기 앞서 정적 바인딩에 대해 간략히 설명 드리겠습니다. 정적 바인딩 (Static Binding) 위 예시를 Java가 아니라, 정적 바인딩을 지원하는 가상의 언어라고 생각해봅시다. 정적 바인딩의 경우, 호출하는 함수의 주소가 컴파일 타임에 결정되기 때문에, 컴파일러가 함수의 호출문을 함수의 주소로 점프하는 기계어로 번역하게 됩니다. (어셈블리 코드 참조) 따라서 각 객체들은 함수의 주소를 저장할 필요 없이, 변수들만 저장하면 됩니다. 또한, 이미 결정된 주소로 가서 함수를 단순히 실행시키기만 하면 되기 때문..

    Java 입출력, Scanner와 BufferedReader의 비교

    Java 입출력, Scanner와 BufferedReader의 비교

    https://codingnotes.tistory.com/216 Java 입출력 (스트림, 버퍼) 스트림(Stream)이란? 먼저, 스트림 이란? 연속적인 데이터의 흐름 또는 데이터를 전송하는 소프트웨어 모듈을 의미합니다. 아래 그림처럼, 자바에서 입출력 스트림은 우리가 작성하는 응용프로그 codingnotes.tistory.com 스트림과 버퍼에 대한 포스팅은 위 링크에서 확인하실 수 있습니다. Scanner Java에서 키보드로부터 입력을 받는 방법에는 크게 두가지가 있습니다. Scanner를 이용한 방법과 BufferedReader를 이용한 방법입니다. Scanner에는 nextInt(), nextLine(), nextDouble(), nextFloat() 등의 메서드가 있습니다. 보시는 것처럼 입..

    Java 입출력 (스트림, 버퍼)

    Java 입출력 (스트림, 버퍼)

    스트림(Stream)이란? 먼저, 스트림이란? 연속적인 데이터의 흐름 또는 데이터를 전송하는 소프트웨어 모듈을 의미합니다. 아래 그림처럼, 자바에서 입출력 스트림은 우리가 작성하는 응용프로그램과 입출력 장치를 연결해줍니다. 응용 프로그램이 입력 스트림과 연결하면, 입력 스트림은 입력 장치를 제어하여 입력을 받고, 응용 프로그램에게 전달합니다. 출력도 마찬가지로, 응용 프로그램이 연결된 출력 스트림에 출력하면, 출력 스트림은 출력 장치를 제어하여 출력을 완성합니다. 즉, 자바 응용 프로그램은 입출력 스트림과만 연결하고, 입출력 스트림이 입출력 장치를 제어하고 담당하는 역할을 수행합니다. 하지만, 스트림이 실제 입출력 장치를 제어하는 것은 아닙니다. 스트림은 내부적으로 운영체제의 API인 시스템 콜을 호출하..

    Java 8 / 11 / 17의 변화

    오늘은 Java 8, 11, 17은 무엇이고, 각 버전의 주요 업데이트 사항은 무엇인지 알아보겠습니다. ❓LTS란? LTS는 Long Term Support를 의미합니다. 즉, 출시 후 8년 동안 보안 업데이트 및 버그 수정을 지원합니다. 일반 버전과 달리 안정성에 중점을 둔 버전으로, 기능 업데이트는 최소한으로 이루어지거나, 아예 없는 반면 보안 업데이트의 지원이 일반 버전보다 훨씬 깁니다. 그렇기 때문에 서버 등 최신 기능보다 안정성이 중요한 곳에서 많이 쓰이며, 기업이나 기관 등에서 기능 업데이트로 인해 이용 중인 다른 소프트웨어가 영향을 받는 것을 피하기 위해 이용하기도 합니다. Java 8 / 11 / 17은 모두 LTS(Long Term Support) 버전입니다. ❓Java 8에서는 어떤 변..

    Multipart란?

    1. Multipart란? 웹 클라이언트가 요청을 보낼 때, http 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것. 웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 바디 부분에 파일정보를 담아서 전송을 하는데, 파일을 한번에 여러개 전송을 하면 body 부분에 파일이 여러개의 부분으로 연결되어 전송된다. 이렇게 여러 부분으로 나뉘어서 전송되는 것을 Multipart data라고 한다. 보통 파일을 전송할 때 사용한다. 2. HttpServletRequest는 파일 업로드를 지원하지 않는다. HttpServletRequest는 웹 클라이언트가 전달하는 Multipart 데이터를 쉽게 처리하는 메소드를 제공하지 않는다. (HttpServletRequest는 http 프로..

    SLF4J란?

    SLF4J란?

    1. SLF4J란? logging 관련 라이브러리는 다양하다. SLF4J는 이러한 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공한다. SLF4J는 로깅 Facade이다. 로깅에 대한 추상 레이어를 제공하는 것이고 interface의 모음이다. 2. SLF4J를 이용해 로깅 라이브러리 사용하기 어플리케이션은 SJF4J를 사용함으로써, 로깅 라이브러리를 어떤 것을 사용하던지 같은 방법으로 로그를 남길 수 있게함. 로그 라이브러리를 교체하더라도, 어플리케이션의 코드는 변경될 필요가 없음. 3. Maven에 SLF4J와 logback 의존성 추가하기 참고로 logback-classic 1.2.3은 이미 slf4j-api 1.7.25에 대한 의존성을 가지고 있기 때문에 slf4j-api를 추가..

    로깅(Logging)이란?

    운영 중인 웹 어플리케이션이 문제가 발생했을 경우, 문제의 원인을 파악하려면 문제가 발생했을 때 당시의 정보가 필요하다. 이런 정보를 얻기 위해서 Exception이 발생했거나, 중요 기능이 실행되는 부분에서는 적절한 로그를 남겨야한다. 로깅이란? 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동. 프린트 줄 넣기(printlning)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다. 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다. 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야한다. 일반적인 로그 기록의 이점 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있다. 로그는 성능에 관한 통계와 정보를..

    Spring Security

    Spring Security

    1. 보안 용어 인증(Authentication) 클라이언트가 자신이 주장하는 사용자와 같은 사용자인지를 확인하는 과정 유저가 누구인지 확인하는 절차 예) 로그인 인가(Authorization) 클라이언트가 하고자 하는 작업이 해당 클라이언트에게 허가된 작업인지를 확인 특정 자원에 대한 접근 권한이 있는지 확인하는 절차 유저에 대한 권한을 허락하는 것. '권한부여'나 '허가'와 같은 의미로 사용된다. 즉 어떤 대상이 특정 목적을 실현하도록 허용(Access)하는 것을 의미한다. 예) 네이버의 특정 카페는 로그인을 했다 하더라도, 어느 정도 이상의 등급이 되지 않을 경우 이용하지 못한다. 접근 주체(Principal) 보호된 대상에 접근하는 유저 권한 인증 주체가 어플리케이션의 동작을 수행할 수 있도록 허..