만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/JAVA 20

[Java] == 와 equals() 의 차이

equals() "String 클래스 내에서" equals() 메소드는 "대상의 내용"을 비교 == 연산자 == 연산자는 "대상의 주소값"을 비교 String a = new String("abc"); 와 String b = "abc"; 의 차이는 무엇인가? String a = new String("abc"); 전자는 abc 값을 가지는 문자열 객체를 힙에 생성해 참조하는 것이기에 문자열이 같아도 다른 인스턴스를 참조하는 것 String b = "abc"; 후자는 "abc" 문자 리터럴을 이용해 객체 생성했으므로 문자열이 같으면 하나의 인스턴스를 참조한다. 따라서 전자는 == 가 False, equals 가 True

[Java] abstract class 추상클래스란?

추상클래스에서 추상이란? 추상은 실체의 공통 특성을 추출하는 것을 의미한다. 예를 들어, 트럭과 승용차는 모두 자동차라는 공통점이 있고 '주행한다' 라는 공통된 행위도 묶을 수 잇다. 이처럼 구체적인 실체라기보다는 공통적인 특성을 추상적으로 묶은 것이라 할 수 있다. 그럼 추상 클래스는? 실체 클래스들의 공통 특성을 묶어 분리 선언한 클래스를 추상클래스라고 한다. 말하자면 추상클래스와 실체클래스는 상속의 관계를 지닌다. 추상클래스 특징은? * 추상클래스만으로 인스턴스를 생성할 수 없다. 즉 new 연산자 통해 객체 생성이 불가. * 추상 클래스는 extends 키워드 뒤에만 올 수 있다. 자식클래스로는 사용할 수 없다. 그럼 왜 쓰는 것인가? 1. 클래스들의 공통적인 필드와 메소드의 이름을 통일해 협업시..

[Java] StringTokenizer, StringBuffer, StringBuilder 클래스 차이

StringTokenizer 문자열이 특정 구분자 (이를 delimeter라 한다)로 연결 되어있으면 2가지 방법으로 문자열을 쪼갠다. 1. String.split() 2. java.util.StringTokenizer 1과 2의 차이는 1은 정규표현식(regular expression), 2는 문자로 구분을 한다는 것이다. String.split() class Main { public static void main(String\[\] args) { String str = "안녕하세요,만나서-반가워요"; String\[\] tokens = str.split(",|-"); for (String token : tokens) { System.out.println(token); } } } StringTokeni..

[JAVA] 예외 (Exception)

예외 Exception 에러란? JVM 실행에 문제가 발생함을 의미. 자바에서는 에러 이외에 예외(Exception)라고 부르는 오류가 존재한다. 예외는 예외 처리 (Exception Handling) 을 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다. 예외의 종류 예외에는 일반 예외와 실행 예외가 있는데 일반 예외는 컴파일 과정에서 검사한다. 만약 예외처리 코드가 없다면 컴파일과정에서 오류가 발생한다. 하지만 실행예외 (런타임예외)는 컴파일러가 검사하지 않는다 그렇기 때문에 개발자를 괴롭히는 에러는 대부분 실행 예외다. (=런타임예외) 예외 객체 트리 일반예외는 대신 RuntimeException을 상속받지 않는다. 그 외의 객체는 런타임예외 객체라 할 수 있다. 예외 처리 코..

[JAVA] 다형성 (상속, 오버라이딩, 업캐스팅)

다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. -www.opentutorials.org- 다형성의 대표적인 예로는 Override 가 있다. 클래스의 부모메소드에 정의되어있는 메소드를 자식클래스의 입맛에 맞게 다양한 형태로 바꿀 수 있음을 의미한다. 자바 다형성의 예시를 확인해보자. Car 는 모든 자동차 종류의 부모 클래스다. 하위에는 자동차의 한 분류인 SUV 가 있다. Main.java class Main { public static void main(String[] args) { Car car = new Car(); Car suv = new Suv(); car.run(); suv.run(); } } Car.java public class Car { ..

[JAVA] Thread 로 은행계좌 문제 (Bank Account Problem)를 확인해보자.

쓰레드란? 프로세스 내 하나의 실행 흐름 단위이다. 각 프로세스는 최소 1개 이상의 쓰레드를 가진다. (만약 그 쓰레드가 1개인 경우, 그 쓰레드를 메인 쓰레드라 한다) 멀티 스레드를 잘 구성한다면, 멀티 프로세스로 구성할 때에 비해 메모리 공유량이 줄어들어 시스템 자원 소모가 줄어든다. Context Switching 에 대한 오버헤드도 줄어든다. 하지만 프로그래머가 골치를 썩일 문제 또한 많은데 그런 예시 중 대표적인게 "은행 계좌 문제", "식사하는 철학자 문제" 이다. 이중 은행계좌 문제로 알 수 있는 건, Critical Section 문제다. 임계구역 문제인데 같은 자원을 서로 다른 쓰레드가 점유하고자 해서 생기는 문제점이다. 이 임계구역 문제를 해결하기 위해선 적절한 실행 흐름 제어가 필요하..