본문 바로가기

JAVA

(10)
If문 vs Switch문 💡문득 if문과 switch문의 차이가 궁금해져서 찾아보았다. If문 (branch statement 기반) if문은 조건이 만족하면 실행, 만족하지 않으면 무시한다. 조건이 만족하지 않으면 조건이 만족하거나 else if 문을 종료할 때까지 다음 조건문을 계속 확인한다. 따져야하는 조건이 많을수록 연산량이 늘어난다. if문을 작성할 때, 자주 사용하는 기능 순서대로 조건문을 작성하는 것이 성능 향상에 도움이 된다. 장점 : 점프테이블을 만드는 오버헤드가 없다. 단점 : if 혹은 else if를 만날 때마다 조건을 확인하기 위한 instruction이 계속해서 필요된다. -> 따져야 할 조건 수가 적을 경우 if-else를 쓰는 것이 유리하다. Switch-case 문 (jump statement 기반..
[알고리즘] 이분탐색 int BinarySearch(int arr[], int target) { int left = 0; int right = arr.length-1; int mid; while(left target) right = mid-1; else left = mid+1; } return -1; } 1. 내가 찾아야 할 범위를 left ~ right 로 설정한다. 2. 정답을 mid로 간주하고 유효한지 확인한다. 3. 2를 따지며 left, right를 줄여나간다. (right = mid-1, left = mid+1) 4. left > right가 되면 종료한다.
배열 복사 (얕은 복사, 깊은 복사) 깊은 복사 : 객체의 실제값을 새로운 객체로 복사한다. 대개의 복사는 깊은 복사를 의미한다. public class Main{ public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; int[] b = new int[a.length]; for (int i = 0; i 여러 객체가 같은 주소를 참조, 하나의 값을 변경하면 나머지 대상의 값도 변경된다. public class Main{ public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; int[] b = a; } }
[Java] substring (문자열 자르기) substring 1. 인자값 1개 : 인덱스 이후 값을 가져온다. String str = "가나다라마바사"; str.substring(5); //5번째 인덱스부터 자른다. //바사 2. 인자값 2개 : substring(beginIndex, endIndex) - 시작인덱스부터 끝 인덱스 전 값을 가져온다. String str = "abcdefghijk"; str.substring(0,4); //index 0부터 3까지 //abcd
[JAVA] HashMap 기본 및 정렬 HashMap : HashMap은 Key, Value 한 쌍을 데이터 타입으로 가진다. 키를 해싱하여 자료를 저장하고 꺼내오기 때문에 속도가 빠르다. HashMap hashMap = new HashMap(); hashMap.put("사과", 1); //쓰기 System.out.println(hashMap.get("사과")); //읽기 //전체 순회 for(Map.Entry entry : hashMap.entrySet()){ entry.getKey(); entry.getValue(); } //key 값이 있는지 검사, 있으면 true 없으면 false hashMap.containsKey("사과") //HashMap 크기 hashMap.size() 같은 key로 value를 입력할 때에는 이전 키, valu..
[Java] BigInteger(큰 정수) 타입 범위 메모리 크기 int -2,147,483,648 ~ 2,147,483,647 4byte long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8byte BigInteger은 문자열 형태로 이루어져 있어 어떠한 숫자든지 담을 수 있다.(길이 제한 없음) import java.math.BigInteger; BigInteger bigNumber = new BigInteger("10000"); 인자값으로 문자열을 넘겨주어야 한다. BigInteger 연산 문자열이기에 연산이 불가능하다. BigInteger 클래스 내부에 있는 메서드를 활용해야 한다. System.out.println("덧셈(+) :" +bigNumber1.add(bigNumber2)..
[JAVA] 객체지향(3) Abstract Class(추상 클래스) 자식 클래스에서 반드시 부모 클래스의 메서드를 재정의 해서 사용하기 때문에 부모 클래스에서의 메서드 구현이 무의미한 상황 -> 함수에 대한 정의는 있어야 하는데 몸통은 필요 없을 경우 abstract 사용. abstract 메서드는 abstract 클래스에만 있을 수 있다. 부모 클래스에서 해당 메서드의 선언부만 남기고 구현부는 세미콜론(;)으로 대체 abstract 키워드를 메서드 선언부에 추가 (구현부가 없다는 의미) abstract 키워드를 클래스 선언부에 추가 (객체를 생성할 수 없는 클래스라는 의미) 추상 클래스의 특징 - abstract 클래스는 상속 전용 클래스이다. - 객체를 생성할 수는 없지만 자식 클래스를 참조할 수는 있다. - 부모 클래스에서 ..
[JAVA] 객체지향 (2) Inheritance(상속) : 기존 클래스의 필드, 메서드를 자식 클래스에서 재사용하기 위한 것 - 생성자, 초기화 블록(static, instance)는 상속하지 않는다. 유지 보수에 유리 extends 키워드를 사용 · 컴파일 시점 extends가 없으면 컴파일러가 extends Object 붙여서 실행 - Object Class 는 모든 Class의 부모 클래스 상속 (is a 관계) : 자식 클래스 is a 부모 클래스 - 위 첨부 사진에서 SpiderMan is a Person. 자바는 단일 상속만 지원 ※ 다중 상속 효과를 원한다면 1) interface 또는 2) 포함 관계(has a)로 구현 가능 포함 has a 관계 public class SpiderMan2 extends Person{..