아무거나 개발공부 27

JAVA - stream count() 메서드의 반환값은 왜 long 일까 (feat. chatGPT)

개요 회사에서 자바로 신규 게임을 개발 중에 있기도 하고, 의식적으로 계속 stream을 사용하려고 연습중이라, Stream을 무지하게 사용하고 있다. 그런 와중에 stream의 종결함수인 count()를 사용하며 int로 형변환 하던 중 '생각해보니 count()의 return 타입이 왜 long 타입이지?' 라는 궁금증이 들었다. 뇌피셜로는 당연하게도 얼마나count()가 될지 모르니, 가장 큰 타입(long)으로 한 거 같긴한데.. 그렇다면 왜collection의 size()메서드는 retrun 타입이 int인걸까? 요즘 핫한 chatGPT와 구글 서치를 통해 알아보았다. 구글 1996년 초 자바가 나왔을 때는 일반 pc 메모리는 8~16MB 였다. 배열과 collection 모두 메모리 크기와 밀..

Spring Framework Core (2) - Spring Bean 주입 방법 및 예시

스프링 빈 스프링 빈은 이름, 타입, 객체로 구성 @Configuration + @Bean 프레임워크를 설정할 때 애플리케이션을 설정할 때 애플리케이션 전체에서 공통으로 사용할 때 @ConponentScan + Stereotype Annotation 비즈니스 로직을 처리할 때 예시로 들어가기전 file tree KaKao & Member는 NotificationService를 상속받고 있다. Spring Bean 주입 - @Bean + @Configuration : 01 메서드의 파라미터 전달 @Configuration public class JavaConfig { @Bean public MemberRepository memberRepository() { return new MemberRepository..

사내 교육 - Spring Framework Core (1)

개요 코로나가 잠잠해진 지금 사내에서는 몇몇 오프라인 강의를 선보였다. 강사는 사내 다른 법인의 분이였고, 개발 관련 책을 무려 7권이나 쓰셨다고 한다. 그분이 강의하신 Spring Framework Core를 수강하였고, 자료를 정리하였다. Why Spring Framework?? 생산성 품질 사실상 표준 JAVA 프레임워크 - JAVA 대안이없음 엔터프라이즈 애플리케이션에 적합한 JAVA 프레임워크 엔터프라이즈 애플리케이션이란 무엇? 다른 JAVA 웹 프레임워크들 Spark vert play netty EJB 대신 Spring을 사용하는 이유 비침투적인 프레임워크 EJB는 implements 다 구현 해야함 → 침투 스프링은 최대한 막음 POJO(Plain Old Java Object) - 순수자바 ..

Arrays.asList() vs Collection.singletonList() vs List.of()

사용법 3개의 메서드 모두 배열을 List로 변환하는 기능을 한다. 예시를 보면 바로 이해가 갈 것이다. //List.of String [] temp = {"a","b","c","d"}; List aslist = Arrays.asList(temp); //Collection.singletonList String [] temp2 = {"a"}; List singletonList = collection.singletonList(temp2); //List.of 메서드 String [] temp3 = {"a","b","c","d"}; List listOf = List.of(temp3) 위와 같이 배열을 List 타입으로 변환해준다. 위 예제에서는 String 타입 List 인데 다른 타입( ex) class, i..

20년차 개발자의 실무 개발 노하우를 담은 JAVA 기초 - 내 기준 정리

개요 회사에서 외부강의를 지원하는 컨텐츠가 7개월전인가 생겼는데 그 때 '만만해보이는거 간단히 들어볼까'하고 신청했던 강의이다. 결론부터 말하자면 7장 전까지는 JAVA 기초 뿐만 아니라 통상적인 컴퓨터 언어라면 알아야 하는 내용들을 다루고, 그 이후부터는 JAVA의 특성을 다룬다. 그래서 7장 이후에 내가 몰랐던 내용이나, 아차차 까먹었다 하는 내용들만 간단히 정리 해놨다. 기승전결이 없는 나만 볼 수 있는 정리이다. Section 7 메서드 staic block → static method → static init 순서 자바 변수 메모리 할당 부분 좀더 알아보기 Section 8 상속 모든 클래스는 초기화 전에 상위클래스의 생성자를 호출한다. Section 9 다형성 & 추상화 instanceof O..

java에서 모니터 사용하기 - synchronized

세마포어는 실제로 매우 오래된 동기화 도구이다. 현재에는 모니터(monitor)라는 동기화 도구를 주로 사용하며, 이는 좀 더 고수준의 동기화 기능을 제공한다. QuickSort 알고리즘으로 유명한 C. A. R. Hoare(호어)의 논문에서 처음 등장한 개념이다. 하나의 객체마다 하나의 모니터를 결합할 수 있으며, 모니터와 결합된 객체는 잠금(lock) 기능을 가지고 있어 하나의 쓰레드만 접근 가능한다. 모니터 구조 ![[Pasted image 20221107200903.png]] 위는 모니터 구조를 나타낸 그림이다. 모니터는 공유 자원 + 공유 자원 접근함수로 이루어져 있고, 2개의 큐를 가지고 있다. 각각 mutual exclusion(상호배타) queue, conditional synchroniz..

JAVA 기초다지기 (3) - Class , Object, Instance 완벽 이해

클래스, 오브젝트, 인스턴스는 워낙 범용적으로 많이 쓰이고 있다. 여기서는 자바에서의 클래스, 오브젝트, 인스턴스의 관계와 의미에 대해서 정리하였다. 클래스와 객체(Object) 클래스로 모델링한 객체를 정의한다. 객체를 생성할 수 있는 틀을 제공해 주는 소스코드 객체는 클래스의 인스턴스이다. 클래스와 객체, 인스턴스 용어 구분과 인스턴스화 클래스(Class) : 붕어빵 틀 = 하나의 붕어빵 틀로 수많은 붕어빵 객체를 만들 수 있다. 객체(Object) : 붕어빵(들), 객체는 인스턴스를 포함하는 일반적인 의미 인스턴스(Instance) : 각각의 붕어빵(인스턴스는 클래스를 통해 생성된 객체의 한 예이다. 인스턴스화(Instantiate) : 붕어빵을 굽다(클래스로부터 인스턴스를 생성하는 것) 인스턴스화..

JAVA 기초다지기 (2) - JAVA 프로그램

Main() method Java 어플리케이션의 시작점으로 main() 메소드가 포함된 클래스가 반드시 존재해야한다. RunTime에 main()메소드가 존재하지 않는 경우 아래와 같은 오류 발생 : Exception in thread "main" java.lang.NoSuchMethodError.main Command-Line arguments : main 메소드의 파라미터를 통해 애플리케이션 진입시에 값을 전달 할 수 있다. 이 기능을 활용해서 애플리케이션 구동시 초기 설정 환경 변수등의 값으로 활용할 수 있다. public static void main(String[] args) Compile & Running compile : javac 명령어를 이용하여 java 소스를 Compile gkaus ..

JAVA 기초다지기 (2) - JVM

JVM이란? JVM(Java VIrtual Machine)은 자바 가상 머신으로 다양한 플랫폼(OS)위에 가상 머신 역할로 자바로 개발한 바이트 코드(.class 파일)가 실행될 수 있도록 런타임 환경을 제공하며 각 플랫폼별 JVM은 오라클이나 Open JDK 개발사들이 제공한다. 이렇기에 플랫폼 독립적인 언어 JVM이 구동되면 OS에서 프로세스 형태의 Runtime instance로 구동된다. JVM의 주요 Task : 코드 로드/확인/실행, 런타임 환경 제공 JVM 제공하는 기능 : 메모리 영역, 클래스 파일 형식, 레지스터 세트, 가비지 콜렉터, 치명적 오류 보고 등 JVM Architecture JVM 내부구조는 Class Loader, Memory Area, Execution Engine 을 포..

JAVA 기초다지기 (1) - Java Overview

개요 사실 학부 때는 C++과 파이썬만 배우고 사용하였다. 졸업 후 SSAFY를 하면서 자바라는 언어를 처음 접했고, 대강 배워 프로젝트를 진행하였다. C++ 짬밥이 있기 때문에 사용하는데 어렵지는 않았지만 C++과는 다른 점이 많았기에 회사에서 개발을 하면서 스스로 부족한 점을 느꼈다 마침 사내 교육사이트가 개편되어 다양한 플랫폼에서 강의를 들을 수 있게 되었고, 그 중 러닝스푼즈의 20년차 개발자의 실무 개발 노하우를 담은 JAVA 기초 라는 말에 끌려 바로 신청하게 되었다. 총 18강 열심히 달려볼 예정이고, 중요하다고 생각되는 내용을 블로그에 정리할 예정! JAVA 언어의 특징 JAVA 설명은 생략한다... JAVA 개발 도구 JDK(Java Development Kit) : 자바 개발 도구로 J..

728x90