Programming에서의 CS지식과 같은 기본 지식이 얼마나 중요한지를 알기에 기본 개념 역시 다지자는 의미에서 대충 뭔지는 알지만 확실하게 모를수도 있다 싶은 개념을 정리하고자 한다.static은 변수나 메소드에 키워드로 사용된다.static 키워드를 사용한 변수는
프로그램 실행 시, 저장장치에 있던 내용들이 메모리에 올라간다. 메모리에 어떤 데이터들이 어떤 방식으로 올라가는지 이해하는 것도 기본이라 생각한다.메모리 구조를 알아야, 클래스 멤버, GC, 스레드가 어떤식으로 독립적으로 운영되면서 공유하는 자원이 있는지에 대한 이해를
기본적인 변수 네이밍 규칙을 알아보고자 한다.가장 많이 쓰는 방법은 카멜 표기법(camel case)인데 상황에 따라 여러 규칙에 맞게 사용해야하는 부분이 있어서 기록하려구 한다.😼1.헝가리안 표기법(hungarian case)2.카멜 표기법(camelcase)3.파
Java가 실행되는 환경에서 자바를 대체할 수 있도록 개발된 언어.사용처 백엔드의 코드모바일 안드로이드 어플리케이션 코드and so on..(JS도 코틀린으로 컴파일 가능하다는..) 우선, 코틀린은 정적 언어이다.그래서 컴파일 시점에 모든 객체나 메서드의 타입을
위에서는 코틀린으로 if~else문을 사용하였다.이를 자바에서 3항 연산자로 표현을 하였었다. 아래와 같이.expression은 값을 반환하는 형태이고 statement는 아무런 값을 만들지 않는다.자바에서 이런 모든 제어문이 statement이지만, kotlin에선
enum?흔히, java에서 사용시, enum값 내부에 멤버 변수를 설정하기도 한다.enum 내부에 값과 함수를 정의했다.코틀린에선 기본적으노 ;를 사용하지 않지만 enum의 마지막에는 꼭 사용해야한다.when은 자바와 다르게 좀 더 확장성 있게 object를 지원한다
val은 상수, var은 변수 (맞자나🙋♂️)근데 다르다고 한다. (약간😅)val은 값 자체를 바꿀 수 없지만 특정 클래스의 객체가 들어가면 해당 값의 속성은 바꿀 수 있다. (뭐라고?🤷)근데 이렇게 내부 속성 마저 변하게 하고 싶지 않다면?그때 나오는게 con
즉, new 키워드로 새로운 객체를 생성할 수도 있고 & ""안에 값을 입력하여 생성할 수도 있다.소스상에서 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String 객체를 생성해서 사용할 수도 있다.JVM이
java file을 compile하게 되면 .class 확장자를 가진 클래스 파일이 생성된다.이 .class파일은 자바 바이트 코드로 구성되어 있다.JVM이란 가상 머신을 사용하는 자바 언어에서도 컴파일 된 바이트 코드를 효율적으로 빠르게 실행 시키는게 중요하다.자바
java compile & 실행 과정을 정말 잘 설명해주는 그림이라고 생각해서 가져왔다.위를 토대로 설명을 해보자.누군가 물어볼 수 있지만 대답이 술술 나오지 않아 답답해서 정리한다.1️⃣ 우선, 개발자는 개발 툴을 이용해서 .java 확장자가 붙은 파일을 생성하게 된
우리가 Value처럼 다룰 수 있는 익명 함수이다.Method의 파라미터로 넘겨줄 수 있으며return이 가능하고보통의 object와 하는 모든 것을 할 수 있다.기본적으로 value처럼 취급을 한다.리턴 타입을 명시해줘야 한다.(때에따라 하지 않을수도 있다.){} 중
Java8 이전엔 배열 & 컬렉션 인스턴스를 다루는 방법은 for, foreach를 사용하는 방법이었다.로직이 복잡해질 수록 코드 양이 많아지고 여러 로직이 섞이게 된다. 메서드를 나눌 경우 루프를 여러 번 돌기도 한다.Java 8에서 추가한 스트림은 람다를 활용할 수
미완성된 클래스이다.미완성된 클래스는 미완성 된 메서드인 추상 메서드를 포함하고 있다.혼자서는 클래스의 역할을 못하지만, 새로운 클래스를 작성하는데에 있어서 바탕이 되는 부모 클래스로서의 중요한 의미를 갖는다. 클래스를 작성함에 있어 어느정도 작성된 상태에서 시작할 수
인터페이스는 인터페이스를 구현하는 모든 클래스에 대해 특정한 메소드가 존재하도록 강요한다.목적은 구현 객체가 같은 동작을 한다는 것을 보장하는 것이다. 일종의 추상 클래스이다. 하지만 추상 클래스보단 추상화의 정도가 높아서 추상 메소드 이외의 일반 메서드나 멤버 변수를
변경이 불가변경 가능Thread-Safe하게 동기화 가능 (Synchronized ⭕️)변경 가능동기화 불가능 (Synchronized ❌)new 연산을 통해 생성된 Instance의 메모리 공간은 변하지 않는다.(Immutable)GC로 제거되어야 한다.문자열 연산
Primitive 자료형(long, float, Double) (원시 자료형)산술 연산이 가능하며, null값을 가질 수 없다.Wrapper 클래스 (객체)Unboxing을 하지 않으면 산술 연산이 불가능하지만, null값을 가질 수 있다.Collection, null
Java에는 기본형과 참조형이 있다.서로 다른 특징이 있고 이를 잘 알아야 상황 적절하게 쓸 수 있다.변수에 값 자체를 저장하며, stack 영역에 생성된다.사용하기 전 반드시 선언되어야 하며, 초기화 하지 않으면 자료형에 맞는 기본 값이 들어간다.OS에 따라 자료의
기본 자료형을 객체 타입의 자료형으로 변환이 필요할 때 주로 사용한다.사용용도 객체로 저장해야 하는 경우매개변수로 객체가 요구될 경우(ex, generic, Collection type)객체 간 비교가 필요한 경우Generic이나 Collection에서 사용할 경우,
함수가 호출 될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.Stack Frame : 함수 호출 시 할당되는 메모리 블록 (지역 변수의 선언으로 인해 할당되는 메모리 블록)call-by-value : 값에 의한 호출방식은 함수 호출 시 전달되는
구체적인 클래스 타입을 알지 못해도 해당 클래스의 객체 생성, 메소드, 타입, 변수들에 접근할 수 있도록 도와주는 java API동적으로 클래스를 사용해야 할 때 필요하다.작성 시점에는 어떤 클래스를 사용해야 하는 지 모르는 경우, 런타임 시점에 클래스를 가져와서 실행
우선, 객체지향 설계원칙(SOLID) 중에서 OCP를 생각해보자.높은 응집도와 낮은 결합도응집도 : 변화가 알어날 때, 해당 모듈에서 변하는 부분이 큰 정도결합도 : 하나의 오브젝트가 변경 일어 날 때, 관계를 맺고 있는 다른 오브젝트에게 변화를 요구하는 정도.모듈의
Thread는 Runnable과 Callable의 구현된 함수를 수행한다는 공통점이 있다. 차이점도 있다. Runnable : 어떤 객체도 리턴하지 않는다. Exception 없다. Callable : 특정 타입의 객체를 리턴한다. Exception을 발생시킬 수 있
공간적 특성 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드)에 생성클래스 멤버 라고 불린다.시간적 특성클래스 로딩 시에 멤버 생성객체가 생기기 전에 이미 생성객체가 생기기 전에 사용 가능객체가 사라져도 멤버는 사라지지 않음멤버는 프로그램 종료 시 사라짐공유의 특성
우선 자바 언어의 특징을 살펴보자.멀티 플랫폼크로스 플랫폼 (JVM만 설치되어 있다면 어떤 OS에서도 애플리케이션을 작동 시킬 수 있다.)메모리 관리자바는 포인터 개념이 없고 자동으로 메모리 관리.GC가 사용하지 않는 자원을 자동으로 반환해준다.프로그래밍이 편해진다.O
data class 대략 이런 형태로 쓰인다. Property 생성해준다. var, val이 쓰여진 변수들의 getter, setter들을 자동으로 만들어준다. componentN() component 함수를 작성해준다. 객체의 값을 여러 변수로 분리해서 사용하는
Java 5에서 추가된 패키지동기화가 필요한 상황에서 사용할 수 있는 다양한 유틸리티 클래스를 제공Locks : 상호 배제를 사용할 수 있는 클래스 제공Atomic : 동기화가 되어있는 변수 제공Executors : 스레드 풀 생성, 스레드 생명주기 관리, task 등
우선, Atomicity(원자성)의 개념을 알아야 한다.Atom = 더 이상 쪼갤 수 없는 단위처음부터 끝까지 실행이 되거나 아예 아무것도 실행되지 않던가 하는 Action이다.쇼핑몰에서의 '결제' -> '상품 재고 수량 변경' 은 하나만 이뤄져서는 안되고 둘 다 실행
Kotlin에는 static 키워드가 없다.🧐 그럼 코틀린에선 static을 대체하기 위해 무엇을 써야 할까?우선, 안드로이드에선 정적(static) 변수/메서드를 사용하는 경우가 보통은 아래와 같다.Activity, Fragment의 인텐트 extra로 사용하는 키
단일 책임 원칙클래스나, 함수는 단 하나의 책임(기능)만을 가져야 한다.클래스, 함수가 비대해지면 이를 분리시킬 필요가 있다.산탄총 수술하나의 책임이 여러 개의 클래스로 분산되어 있는 경우요구 사항이 변경 될 때, 분산된 책임을 가지고 있는 모든 부분을 봐야 한다.개방
결론부터 말하고 시작하려 한다. List.sort()는 List의 데이터를 배열로 옮긴 뒤 정렬 이후 다시 리스트에 데이터를 옮긴다.해당 정렬에 사용되는 알고리즘은 TimSort 이다.이제 하나씩 까보자.sort메소드는 매개변수로 전달되는 Comparator를 통해 값