분류 전체보기 73

자바_instanceof (객체타입 확인)

자바의 신 서적을 을 보다가 멘토님의 질문에 답을 잘 하지 못해, 관련 자료를 찾아봤다, 신기한게 개발을 할때 잘 쓰고 있는걸 막상 말하려고 하니까이야기를 잘 하지 못한다 instanceof는 객체 타입을 확인하는 연산자이다, 리턴 값으론 true / false 로 반환한다. 주로 상속 관계에서 부모객체인지 자식 객체인지 확인 하는데 사용한다, 이부분이 정확하게 이해가 안되어 여러가지 실해을 하였다.  public class InstanceofTest { public static void main(String[] args){ Parent parent = new Parent(); Child child = new Child(); System.out.println( ..

Java 2024.10.30

final 을 컬 변수에 사용했을 때

불변성이 강조되는 객체지향 프로그래밍의 특성상 자바에서도 UnmodifiableList라는 클래스가 존재한다     해당 UnmodifiableList 선언하는 방식이다.List unmodifiableList = Collections.unmodifiableList(list);  클래스 내부를 보니 단순히 리스트만 가지고 생성자는 이 리스트에 인자로 받은 리스트만 대입할 뿐이다. 그래서 불변이 보정되지 않는다.  UnmodifiableList의 구조를 그림으로 보면 다음과 같다.여기서 Unmodifiable 객체의 메소드 중 변경과 관련된 메소드를 호출하면 다음과 같이 동작한다.얼핏 보면 "변경과 관련된 메소드는 모두 예외를 터뜨리니까 불변성이 보장된게 아닌가?" 싶은 생각이 든다. 하지만 생성자의 thi..

카테고리 없음 2024.10.29

스트링 빌더와 스트링 연산 최적화

JDK1.5 버전 이후부터 String의 + 연산 컴파일시 StringBuilder 로 자동변환되어 성능 최적화가 이뤄 진다고 배웠습니다.하지만 항상 String은 항상 StringBuilder로 변환되지 않습니다.  공식 문서도 찾아봤지만,, 사실 명시해둔게 너무 어려워서 다른 블로그 정리 한 내용 참조 하였습니다. 해당 내용은 자바17로 직접 진행한것입니다. 예제 1번은 이렇게 자바에서도 했을때 최적화가 되는 방법입니다. 예제1) 한줄로 모두 선언한 경우//컴파일 전 소스파일String str1 = "0" + "1" + "2";//컴파일 이 후, 디컴파일 한 소스파일String str1 = "012";한줄로 모두 선언한 경우는 하나의 String으로 변환 되었습니다. 결론적으로 성능최적화가 되었습니다..

Java 2024.10.29

UTF 인코딩

위쪽 부분은 아스키코드 7bit 코드 체계이다.숫자 -> 문자로 매핑한것이다. 표를 보고 예를 들어서  7bit -> 즉 컴퓨터에 표준 방식을 짜뒀다. 하지만 문제가 있다. 하지만 동아시아권으로 왔더니 아스키코드로 커버가 안된다.. (한자어 등등) 한글 입력 방식에 조합형 과 완성형와 어느쪽이 더 좋을까? 논쟁이 있었다고 한다. 조합형이란 ? 각 자음 모음에 숫자를 부여해서 선택 하는 방식이가.예를 들어서 ㄴ(3) + ㅓ(4) + ㄹ(5) =  345를 하면 널 완성형   결국은 완성형으로 채택 되었지만 자음 + 모음 = 글자? 몇개일까? 대략 천개정도 넘는다, 일본 + 중국 + 한글 = 대략 완성형으로 합쳤을떄 10만개가 넘을것이다.16bit로 -> 대략 6만적이다. 그래서 16bit로 전부 커버가 가..

Java 2024.10.28

2진수와 16진수 +@ 10진수

공부 하다가 2진수와 16 진수의 대해 알아보고 내가 이해 한게 맞는지 블로그를 작성하였습니다.   2 진수 ( 0,1)10 진수 ( 0,1,2,3,4,5,6,7,8,9)16 진수 ( 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F) 내가 그냥 쉽게 이해한건2지수는 2개의 값 표현10진수 10개의값으로 표현16 진수는 16개의 값으로 표현 10진수2진수16진수101010A  위에 표의 값은 전부 동일한 숫자이다. 10진수와 2진수의 값 변환 표를 보자  10진수2진수10진수2진수008100011910012101010103111110114100121100510113110161101411107111151111  여기서 2진수에서 +1씩 더한다. 2진수의 1의 값에서 + 1을 더하면 10이..

Java 2024.10.18

시멘틱 버저닝

java 개발을 하다보면 각각의 버전이 존재한다. 크게 메이저 버전만 확인 하였지만 이번 계기로 개념들에 대해 찾아봤다.예를 들어서 spring 버전이 3.2.4 이런식으로 등록이 되어 있다. 이러한 버전관리를 통해서 어떤 범위내에서 호환이 되고 기능 추가버그 수정 등등 주석으로 이해 하였다. 개념들을 살펴보니, 각각 비즈니스 개발을 하고 배포 할때 이렇게 사용하면 좋을꺼 같다.  시멘틱 버저닝 형식시멘틱 버저닝은 MAJOR.MINOR.PATCH 형식으로 버전 번호를 부여합니다. 1.4.2 메이저 버전해당 라이브러리나 기능에 큰 기능이나 변화를 의미 한다. 호환되지 않는 변경 사항이 있을 때 증가합니다. 예를 들어, API의 큰 변경이나 기존 기능이 호환되지 않도록 변경된 경우입니다. 실무에선 매이저 변..

Java 2024.10.18

상속보다 컴포지션(조합)을 사용하라

상속보단 컴포지션을 사용하라 라는 멘토님의 질문을 듣고 인터넷에 이것저것 찾아봤다.그중에 가장 이해가 잘되는 블로그 를 보고 작성할 예정이다. 해당 내용은 Effective Java 에 Item 18에 나오는 내용이다. 언제 상속을 사용할까?상속은 "is-a" 관계를 표현할 때 유용하다.즉 "A는 B다" (개는 동물이다)처럼, 객체들이 완전히 같은 범주에 있을 때 사용이 가능하다. 아니면 확장 목적으로 설계되거나 동일한 프로그래머가 개발할때 등등 이유가 있다.   상속을 할떄 캡슐화가 꺠지는 경우 class Animal { public void makeSound() { System.out.println("Animal is making a sound."); }}class Dog ex..

Java 2024.10.17