본문 바로가기

자바 언어 & 객체지향 지식

(13)
StringBuffer클래스는 언제, 왜 사용하나 출처: https://hstory0208.tistory.com/entry/Java%EC%9E%90%EB%B0%94-StringBuffer%EC%9D%98-%EC%82%AC%EC%9A%A9%EB%B2%95 문자열 변경이 빈번하지 않다면 String 클래스 사용. 문자열이 빈번하게 변경되면서 멀티쓰레드 환경이면 StringBuffer 클래스 사용. 문자열이 빈번하게 변경되면서 멀티쓰레드 환경이 아니라면StringBuilder 클래스 사용
Collections.nCopies 함수 라이브러리 분석과 함께 깊이 있게 이해하기 참고: https://codingdog.tistory.com/entry/java-collections-ncopies-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%B4%88%EA%B8%B0%ED%99%94-%ED%95%A0-%EB%95%8C-%EC%9D%B4%EC%9A%A9%ED%95%A0-%EB%A7%8C-%ED%95%98%EB%8B%A4 알고리즘 공부중 List table = new ArrayList(Collections.nCopies(target+1,null)); 와 같은 생소한 함수가 나왔다. 결론부터 얘기하면 Collections클래스의 nCopies란? 리스트를 초기화 할때 사용된다. 다만 얕은 복사가 되어 nCopies의 두번째 인자로는 객체가 아닌 원시타입이나 n..
자바 스트림 라이브러리 collect의 쓰임 collect자체의 기능이 너무 많기 때문에 주로 쓰이는 것 순으로 정리하려 한다. collect()는 Stream의 데이터를 변형하고 원하는 자료형으로 변환해 준다. Stream의 아이템들을 List 또는 Set 자료형으로 변환 Stream의 아이템들을 joining 1. 어떠한 자료형에서 HashSet자료형으로 데이터를 변환하는 경우. Stream fruits = Stream.of("banana", "apple", "mango", "kiwi", "peach", "cherry", "lemon"); Set fruitSet = fruits.collect(Collectors.toSet()); for (String s : fruitSet) { System.out.println(s); } 어떠한 자료형에서 Li..
내부 클래스의 접근제어의 의미를 예시와 함께 내부클래스의 접근 권한은 내부클래스를 다른 클래스가 사용할 때나 의미가 있음. 예를들어 아래 그림의 왼쪽은 BST클래스 파일이고 그 안에 TreeNode라는 내부클래스를 두었다. 오른쪽은 BST_Inorder_Iterator클래스이고 이 클래스에서는 BST클래스의 내부클래스인 TreeNode클래스를 사용한다. 이렇게 되었을때 타클래스인 BST_Inorder_Iterator클래스에서 다른 클래스의 내부클래스인 TreeNode에 접근할 때에는 BST.TreeNode와 같이 점찍고 접근해야 하는 것이다. 그리고 만약 내부 클래스인 TreeNode의 접근제한을 private으로 해 놓는다면 TreeNode의 외부클래스인 BST에서는 아무문제가 없겠지만 타클래스인 BST_Inorder_Iterator에서는 내부 ..
언제 내부 클래스를 써야 적당한가? 내부 클래스 복습:내부 클래스는 언제 만드는 것이 적절한가? 내부 클래스가 매우 간단하게 이루어지고 외부클래스에서만 내부클래스가 될 클래스를 사용할 경우(캡슐화, 은닉성을 얻을 수 있음). 즉 다른 클래스에서는 내부클래스가 될 클래스를 사용하지 않을때. 내부 클래스는 외부 클래스의 맴버변수처럼 사용된다. 따라서 내부 클래스에서 외부클래스의 맴버변수에 자유롭게 접근할 수 있다. 하지만 외부클래스에서는 내부클래스의 객체를 만들어야 내부클래스의 변수에 접근해야 한다. 그리고 이건 당연한 것이다. 왜? 내부 클래스는 클래스니까! 클래스안의 멤버에 접근하려면 당연히 객체를 생성하는게 맞는 거니까! 내부클래스를 사용함으로써 코드의 복잡성을 줄일수 있음. 왜? 클래스 하나를 통째로 없애는 것이므로. 없애서 다른 하나..
(자바 표현법) 반복자(Iterator)를 갖는 범용자료구조의 구현 (반복자패턴 관련자료 중에서) 반복자(Iterator)를 갖는 범용자료구조 구현 코드 /* 반복자(Iterator)를 갖는 범용자료구조 구현 코드 -범용자료구조의 반복자를 구현하려면 해당범용자료구조는 Iterable인터페이스를 구현해야함. -Iterable인터페이스를 구현해야 한다는 것은 iterator()메서드를 구현한다는 것 (public Iterator iterator(){} ) -내가 반복자를 구현할 일이 있을까? 없을 것이다. 범용자료구조도 만들일이 없을것이다. 하지만 구현방식만 기록해 놓자면 아래와 같이 반환값으로 ArrayListIterator를 반환하고 이 반복자는 hasNext와 next를 구현한, 즉, Iterator인터페이스를 구현한 클래스이다. */ import java.util.I..
공변성, 반공변성, 무공변성에 대하여 출처: https://velog.io/@lsb156/covariance-contrav ariance 출처: https://www.youtube.com/watch?v=PtM44sO-A6g 공변성(=Covariant=함께 변한다), 반공변성(Contravariant=반대로 변한다), 무공변성(=Invariant=변하지 않는다). 여기서 변하고 변하지 않고의 기준은 어떤 관계(예를들면 부모 자식)가 있을때 다른 어떤 요소의(예를들면 저네릭이라는 요소)관계에 영향을 주는가의 문제임. 자바의 저네릭을 예로 들면 A가 B의 상위타입이라고 했을때 GenericType는 GenericType의 상위타입이 아님. 즉A가 B의 상위타입임에도 불구하고 저네릭이라는 다른 어떤 요소에서는 GenericType가 GenericT..
자바 Reflection(리플랙션)에 대해서 출처: https://hudi.blog/java-reflection/ Class객체를 얻어야 리플랙션 라이브러리를 사욯할 수 있다!!!