전체 글
변수나 메소드의 사용 권한은 다음과 같은 접근 제어자를 사용하여 설정할수 있다. private default protected public private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다. 하나씩 순서대로 살펴보자. 1. private 접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다. public class Sample { private String secret; private String getSecret() { return this.secret; } } 위 예제의 secret 변수와 getSecret 메소드는 오직 Sample 클래스에서만 접근이 가능하고 다른 클래스에서는 ..
둘 다 다형성을 높여주는 개념이고 비슷한 이름이지만, 전혀 다른 개념이라고 봐도 무방할 만큼 차이가 있음(오버로딩은 다른 시그니쳐를 만든다는 관점에서 다형성으로 보지 않는 의견도 있다). 공통점으로는 같은 이름의 다른 함수를 호출한다는 것! 1. 오버라이딩(Overriding) 상위 클래스 혹은 인터페이스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 재정의하는 것을 의미. 자바의 경우는 오버라이딩 시 동적바인딩된다. ex) 아래와 같은 경우, SuperClass의 fun이라는 인터페이스를 통해 SubClass의 fun이 실행됨 SuperClass object = new SubClass(); object.fun(); 2. 오버로딩(Overloading) 메소드의 이름은 같음. return 타입은 동일하..
자바는 OS에 독립적인 특성을 가지고 있다. 그게 가능한 이유는 JVM(Java Virtual Machine) 때문이다. JVM의 어떤 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보자. 자바 컴파일 순서 1. 개발자가 자바 소스코드(.java)를 작성합니다. 2. 자바 컴파일러가 자바 소스코드(.java)파일을 읽어 바이트코드(.class)코드로 컴파일 합니다. 바이트코드(.class)파일은 아직 컴퓨터가 읽을 수 없는 JVM(자바 가상 머신)이 읽을 수 있는 코드입니다. (java - > class) 3. 컴파일된 바이트코드(.class)를 JVM의 클래스로더(Class Loader)에게 전달합니다. 4. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 ..
1. 정적 타입 언어(Statically typed language) 먼저, 변수의 타입이란 int, short, float, String, 객체 와 같은 자료형을 뜻한다. 정적 타입 언어(Statically typed language)는 컴파일 시간에 변수의 타입이 결정! Java, C, C++와 같은 언어들은 프로그래머가 변수의 타입을 직접 명시해 주어야함 OCaml, Haskell, Scala, Kotlin과 같은 언어들은 타입 추론(type inference)을 이용하여 변수의 타입을 추론 장점 : 컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도↑ , 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성↑ 단점 : 매번 코드 작성시 변수형을 결정해줘야 하는 번거로움이 있음 2. 동..
1. find 명령어란? find는 리눅스에서 파일 및 디렉토리를 검색할 때 사용하는 명령어! 이름 그대로 리눅스에서 접근할 수 있는 파일 시스템에서, 파일 및 디렉토리를 "찾는(find)" 것! 리눅스 파일 시스템은 구조가 복잡하고 많은 수의 파일과 디렉토리가 저장 되어 있음. 그래서 비슷한 이름의 파일, 동일 확장자를 가진 파일 등등 다양한 파일들이 존재함. 그래서 복잡한 구조에서 원하는 파일을 가능한 정확하게 찾을 수 있도로 find 명령에는 다양한 옵션이 존재! 그러면 find 명령어의 옵션과 사용법은 어떻게 되는지 알아보자! 2. find 명령어 옵션 find 명령에는 몇 가지 옵션과 많은 수의 표현식(Expression)이 존재함. 일반적인 리눅스 명령어와는 조금 다르게, find 명령은 옵션..
1. 명령어 ID란? 리눅스 명령어 id는 현재 사용자의 실제 id와 유효 사용자 id, 그룹 id를 출력하며 내부 bash 변수인 $UID, $EUID, $GROUPS와 짝을 이룬다. "id -un"을 치면 whoami명령어와 같은 효과를 낸다. ※ 경로 /usr/bin/id ※ 사용법 id [옵션]... [사용자명] ※ 옵션 옵션 Long옵션 설명 -g --group 사용자의 그룹 id만 출력 -G --groups 추가 그룹의 id만 출력 -u --user 사용자의 UID를 출력 -n --name -u, -g, -G 옵션과 함께 사용하며 해당하는 id의 이름만 출력 -r --real -u, -g, -G 옵션과 함께 사용하며 해당하는 실제 id를 출력 --help id 명령어 사용법 출력 --versi..
1. Redis란? Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템(DBMS)이다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소! * db-engines.com 에서 key, value 저장소 중 가장 순위가 높다. Redis에 대해서 더 자세하게 알아보기 전 캐시 서버(Cache Server)에 대해서, 데이터 베이스가 있는데도 Redis라는 인메모리 데이터 구조 저장소를 사용하는 이유는 무엇일까? 데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 ..
FormData 객체란? The FormData object lets you compile a set of key/value pairs to send using XMLHttpRequest. It is primarily intended for use in sending form data, but can be used independently from forms in order to transmit keyed data. The transmitted data is in the same format that the form's submit() method would use to send the data if the form's encoding type were set to multipart/form-data. ..
스프링의 중요한 특징인 IoC와 DI에 대해서 정리해보려고 한다. 1. 제어의 역전 IoC (Incersion of Control) 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라고 한다. 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 원래 프로그램은 main()에서 시작해 사용할 오브젝트를 결정하고 그 오브젝트를 만들어 안에 있는 메소드를 호출하는 일을 반복한다. main()이 능동적으로 무엇을 사용할지 결정하고 만드는 구조다. 제어의 역전은 스스로 무슨 오브젝트를 사용할지 선택하지 않는다. 생성하지도 않고 자기 자신이 어떻게 만들어지고..