언제 var을 사용하고 언제 타입 명시할까? 메소드 안에서 지역변수 선언 : var, dynamic(var이랑 dynamic이랑 같다고 보면 된다. dynamic타입은 계속 value의 타입이 변해도 괜찮다. 정말 필요할때만 사용하자.) 클래스 필드 정의 : 타입명시 타입체크 키워드 : is e.g. if(name is String){print(name.length);} null safety : 개발자가 null참조 못하도록 강제함. 기본적으로는 null을 넣지 못하게 되어있고(기본적으로 Nullable이 아니고) null을 허용하려면 코틀린과 동일하게 ? 를 넣어야한다. (String? name = "parker") 다만 이 상황에서는 개발자가 코드상으로 Null check를 해주어야 안전하다. 이를 ..
분류 전체보기
도커 - 이미지 - 이미지 인스턴스 - 컨테이너 이미지 생성하고 가져오는 법 - 이미 만들어진 이미지 카피하기 : 대표적으로 docker hub -- docker run으로 컨테이너를 수행하려고 하면 dockerfile(이미지)를 찾다가 없으면 docker hub로 가서 찾음 -- unable to find image 오류가 나도 docker hub에 있으면 괜찮음 - docker ps -a :: docker가 생성된 모든 컨테이너, 모든 프로세스가 표시됨 - docker run -it node :: 컨테이너를 수행하면서 해당 컨테이너의 쉘로 들어가 인터랙티브가 가능하게(커맨드 입력하거나 출력을 볼 수 있게) 해줌 dockerfile 작성 - FROM baseimage_name :: FROM node :..
우선 자바의 동작 과정을 다시 살펴보자 우선 소스코드가 컴파일을 통해 바이트코드로 변하고 이걸 jvm이 인터프리터를 통해 기계어(머신 코드)를 만들어서 사용한다. 이렇게 되면 아무튼 자바만 올라갈 수 있는 환경이면 다 돌아갈 수 있다.(WORA) 컴파일에서 바로 기계어를 만드는 c++, go, rust등에 비해 성능이 뒤쳐지게 된다. 컴파일 언어는 런타임 환경에서 준비된 기계어를 즉시 수행이 가능한데 코드 최적화도 진행해서 인터프리터 언어보단 빠르다. 문제는 빌드 환경이 c++ arch에 종속적임. 컴파일언어가 성능면에서 더 이득이라고 했는데 이 성능차이를 해결하기 위해 JVM에서는 JIT Compiler를 도입함. JIT Compiler는 바이트코드를 캐싱하고 있다가 런타임 환경에 맞춰 수행하고 반복된..
카카오 메시지는 일 평균 500k /tps 트래픽, 40M 의 평균 연결 세션 수, 6.5M /tps 의 최고 트래픽을 가지고 있다. 2011년 겁나 빠른 황소 프로젝트를 통해 패킷 경량화 및 통신 최적화, 푸시 시스템 구조 최적화, 백엔드 시스템 성능 개선을 함 11년 동안 잘 사용했음 client와 연결되는 곳은 c++로 하고 비즈니스 로직은 java로 했음 c++ 백엔드는 epoll기반 비동기 입출력, 쓰레드 별로 미리 할당한 메모리 버퍼 사용, 대당 500K이상 세션 관리 과연 이게 앞으로도 잘 돌아갈까? 커스텀은 진짜 하나 하나 다 성능을 끄집어냈지만 시간이 지날수록 유지보수가 힘들어진다. 양산은 어느정도 성능 저하는 있겠지만 유지보수가 짱좋음 현재 앞단에 있는 서버는 직접 개발한 코드로 인해 ..
https://if.kakao.com/2022/session/104 정리하고 보니 슬라이드랑 똑같네요. 그냥 슬라이드 보세요.. 1. 컨테이너 왜씀 서버 환경(OS독립)에 구애 받지 않고 여기에 애플리케이션이 구동에 필요한 모든걸 다 때려박고(올인원 패키지) 프로세스 주변 영향을 받지 않고 격리된 상태로 실행 가능. 그리고 해당 컨테이너가 구동하기 위한 자원을 할당하고 사용할 수 있도록 보장을 할 수 있다. 2. 컨테이너 사용 요건 리눅스 컨테이너는 리눅스 기술임. 근데 윈도우에서도 도커 쓰잖음? 그거는 도커가 백그라운드 프로세스로 리눅스 버츄얼 머신 돌려서 그럼. 런타임 컨테이너 관리 도구(도커 같은) 리눅스, 런타임은 필수이고 이 컨테이너들을 여러 개를 관리하기 위해 쿠버네티스 같은 자동화 도구를 사..
https://board.f-lab.kr/articles/1 🧑💻 자바 백엔드 기술 면접 대비하기 - 1편 🧑💻 자바 백엔드 기술 면접 대비하기 - 1편 board.f-lab.kr 자바의 모든 클래스는 Object 클래스를 상속받습니다. 그리고 Object클래스에는 equals() 와 hashCode() 라는 메소드가 선언되어 있습니다. 이 메소드들은 각각 어떤 역할일까요? 이 둘의 차이점은 무엇일까요? 답 : equals는 두 객체가 정말 동일한지를 확인합니다. 내부 값이 아닌 정말 참조하는 메모리가 같은지 확인합니다. hashCode는 참조하고 있는 메모리의 주소를 반환합니다. 즉 equals는 hashCode끼리 비교하는 것과 동일합니다. hashCode는 객체의 메모리 주소를 리턴합니다. 반론..
코틀린하다가 데이터 타입에 Number도 있고 Int도 있길래 3분정도 혼란이 왔다가 코드로 확인하니 바로 이해가 되더라. 코틀린에서 숫자 관련된 모든 데이터 타입들은 Number클래스를 상속받은 클래스들이였다. Int 타입을 확인하면 아래와 같이 Primitive.kt 파일에 정의가 되어있다. Number클래스를 상속받고 있는데 Number는 아래와 같이 구현되어있다.
이제 부업으로 코딩 과외도 해보려고 자바/코틀린에 대해 자료를 준비하고 있다. 어떻게 해야 지치지 않고 흥미를 유지할 수 있을까 고민하던 중 역시 공감대가 있어야 괜찮을 것 같다는 생각에 클래스에 대한 개념까지는 롤을 가지고 해보기로 결심했다.
0. 이 글을 왜 작성하는가 한국에 있는 아티클 중 이 주제에 대해서는 사용하지 말아야 한다는 사람들이 없었다. 나는 그 주제들에 대해 크게 공감할 수가 없어 해외 아티클을 찾아보기 시작하였고 심심찮게 getter/setter를 피하라는 글을 볼 수 있었다. https://www.infoworld.com/article/2073723/why-getter-and-setter-methods-are-evil.html https://dev.to/scottshipp/avoid-getters-and-setters-whenever-possible-c8m https://ericnormand.me/podcast/why-getters-and-setters-are-terrible 1. 본문 우선 getter/setter는 객..
뷰 바인딩 공식 도큐먼트 : https://developer.android.com/topic/libraries/view-binding?hl=ko 뷰 결합 | Android 개발자 | Android Developers 뷰 결합 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩 developer.android.com 뷰 바인딩이란? 쉽게 생각하면 View를 Object화 시켜서 바인딩한다고 생각하면 된다. 이렇게 바인딩한 Object는 코드 내에서 쉽게 접근할 수 있다. findviewbyid와의 차이는? 뷰 바인딩으로 findviewbyid를 대체할 수 있고 findviewb..