본문 바로가기

분류 전체보기60

method에 final을 붙이면 어떻게 돼? (final 메소드) - JAVA method 를 재정의(오버라이딩)를 원치 않을 경우, 어떠한 방법을 사용할 수 있을까? 바로 "final method" 를 사용하면 된다 위 예시와 같이 부모 클래스에서 정의한 메소드를 자식 클래스에서 그대로 사용하길 원할 경우, 여러 개의 method 가 존재하는 가운데 특정 method 만 재정의할 수 없도록 하고 싶을 땐 method 를 정의할 때 final 키워드를 붙이면 된다 2023. 10. 31.
final의 불가변성 (feat... list, Collections.unmodifiableList) - JAVA 개발을 하다보면, 불가변을 필두로 전역 변수를 선언해야 하는 경우가 존재한다 당연히 "final"이라는 키워드를 사용하여 MAXSPEED에 불가변성을 주입하였는데, 그것을 변형하려고 한다면 에러가 발생할 것이다 그렇다면, 데이터 타입의 범주를 넘어서 list 단위로 final이라는 키워드를 붙이면 어떤 현상이 발생할까? "final은 불가변성을 주입하는 키워드이고, final list로 list를 생성하게 되면 해당 list는 불가변일 테니, 내부에 있는 자료들 또한 불가변이지 않을까?" 라고 생각할 수 있다 과연 그럴까? 코드로 살펴보자 코드를 천천히 살펴보자 2번 줄에서 final 키워드를 사용하여 finalList를 생성하였다 그런데 4, 5, 6, 7번 줄에서 값을 자유롭게 삽입하거나 제거할 수 .. 2023. 10. 21.
깔끔한 if문 작성하는 법 좀 알려줘 (feat... 화이트리스트) - JAVA " 왜? " 라는 질문에 답변을 해보자면 "가독성" 을 위해서 위에선 단지 가독성이라고 답했지만 if문이 많아지면 효율성도 떨어지고 유지보수나 기능 확장 측면에서 적절하지 않다 enum을 사용하거나, map으로 대체하는 등 다양한 방법이 많지만, 일단은 조건문에 초점을 잡아보자 먼저 가장 기본적인 수준의 if문부터 살펴보자 "Bubble Style" 보통 이런 식의 if else 조건문을 많이 사용하게 된다 겹겹이 둘러싸인 조건문들의 형상이 마치 방울방울 뭉쳐있다고 해서 "Bubble Style" 이라는 이름이 붙여졌다 코드를 살펴보면, 현재 여러 조건문이 겹쳐있어서 if와 else의 범위가 한눈에 잘 들어오지 않는다 그렇다면 대표적인 차선책으로 어떤 스타일이 존재할까? "GateWay Style" 조건.. 2023. 9. 29.
[알고리즘][탐색] - 선형 탐색 & 이진 탐색 & 해시 탐색 탐색 알고리즘이란? 저장된 데이터들 중 원하는 값을 찾는 알고리즘 선형 탐색 알고리즘 보편적으로 정렬되지 않은 배열이나 리스트에 사용되며 단순하게 맨 앞이나 뒤에서 시작하여 순차적으로 탐색하는 알고리즘 첫 번째 원소가 정답인 경우: 1 마지막 원소가 정답인 경우: n ∴ O(n) 의 시간 복잡도를 가진다 이진 탐색 알고리즘 정렬된 배열이나 리스트에 사용되며 리스트의 중간값과 찾으려는 값의 대소를 비교하여 탐색 범위를 반으로 줄여가며 값을 탐색하는 알고리즘 (탐색하려고 하는 값이 정렬된 리스트의 중간값보다 크면 중간값을 포함한 하위값들은 탐색 대상에서 제외되며 중간값보다 작으면 상위값들은 탐색에서 제외된다) 첫 번째 원소가 정답인 경우: 1 마지막 원소가 정답인 경우: log2(n) ∴ O(log2(n)).. 2023. 8. 6.
[알고리즘][정렬] - 삽입 정렬 삽입 정렬이란? 데이터들을 기존의 배열과 비교하여 자신의 위치를 찾아 삽입하여 정렬을 완성하는 알고리즘 삽입 정렬 예시 오름차순으로 정렬된 [1, 2, 3, 4, 5, 6, 8, 9] 배열이 존재한다고 가정하고 7 이라는 새로운 데이터가 주어졌을 경우 앞(뒤)에서부터 비교하여 6 과 8 사이에 삽입 뒤에서부터 비교하는 삽입 정렬 예시 int[] preSortedArray = {1, 2, 3, 4, 5, 6, 8, 9}; int preSortedArrayLength = preSortedArray.length; int newData = 7; int placeInArray; // 크기 증가가 안되는 배열의 특성을 고려하여 새로운 배열 생성 int[] newArray = new int[preSortedArray.. 2023. 7. 28.
[알고리즘][재귀] - 유클리드 알고리즘 (Euclidean algorithm) 최대공약수(Greatest common divisor)란? "0이 아닌 두 개 이상의 정수의 공통되는 약수 중에서 가장 큰 수이다." 최대공약수를 구하는 가장 대표적인 방법 (소인수분해와 나눗셈을 이용하는 방법)은 소인수분해 원리에 기반을 두기에, 정수의 크기가 커질수록 직접 소인수분해 하기엔 부담이 된다. 이때 효과적인 방법은 나눗셈 정리에 기반을 둔 유클리드 호제법을 사용하는 것이다. 유클리드 호제법이란(Euclidean algorithm)? "2개의 자연수 또는 정식의 최대공약수를 구하는 인류 최초의 알고리즘이다." 두 양의 정수 a , b (a < b)에 대하여 a = b * q + r (0≤ r < b)이라 하면, a , b 의 최대공약수는 b , r 의 최대공약수와 같다. 즉 gcd(a , b.. 2023. 7. 8.
728x90
반응형