JAVA
-
<Java> Thread 상속과 Runnable 구현의 차이점 및 동기화 메소드 선언JAVA 2025. 3. 4. 20:28
🔹 Thread와 Runnable의 차이1️⃣ Thread를 상속하는 경우 ✅ 특징Thread 클래스를 직접 상속받음.run() 메서드를 오버라이드하여 실행할 코드 작성.start() 메서드를 호출하면 run()이 실행됨.❌ 단점자바는 다중 상속을 지원하지 않아서 이미 다른 클래스를 상속받고 있다면 Thread를 상속할 수 없음.객체를 생성할 때마다 새로운 Thread 인스턴스를 만들어야 하므로 재사용이 어렵고 성능이 떨어질 수 있음. 2️⃣ Runnable을 구현하는 경우 ✅ 특징Runnable 인터페이스를 구현하고 run() 메서드를 오버라이드.Thread 객체를 생성할 때 Runnable 구현체를 인자로 넘겨줘야 함.❇️ 장점다른 클래스를 상속받을 수 있음(유연성 높음).쓰레드 객체를 재사..
-
<Java> 로컬 클래스와 지역 변수의 생명 주기JAVA 2025. 2. 25. 23:10
1. 클래스 선언부에서 실행 코드는 허용되지 않음클래스 선언부에서 변수 값 재할당할 수 없는 이유에 대해서는 선언부에 실행 코드를 작성할 수 없기 때문이라고 설명하였다. 2. 클래스 선언부에서 실행 코드는 허용되지 않음 참고로 JDK 8부터는 final이 생략된다. 로컬 클래스의 객체는 메소드 실행이 종료되면 없어지는 것이 일반적이지만, 메소드가 종료되어도 계속 실행 상태로 존재할 수 있다. 예로 들어 로컬 스레드 객체를 사용하는 것이다. 메소드를 실행하는 스레드와 다르므로 메소드가 종료된 후에도 로컬 스레드 객체는 실행 상태로 존재할 수 있다. 하지만, 로컬 클래스에서 지역변수 var를 참조하고 있다면 var가 사라진 후에도 접근해야 하는 문제가 생긴다. JAVA 이를 해결하지 위해 로컬 클래..
-
<Java> 클래스 선언부에서 변수 값 재할당할 수 없는 이유JAVA 2025. 2. 25. 14:09
클래스 단순한 설계도일 뿐 실제 실행되는 코드가 아니다. 클래스 선언부에서 실행 코드는 허용되지 않음클래스는 단순한 설계도이므로, 클래스 선언부에서 변수를 변경하는 실행 코드를 작성할 수 없다.변수 선언 시 int num = 10;처럼 초기화는 가능하지만, num = 20; 같은 재할당은 허용되지 않는다.자바의 클래스 내부에는 "실행 코드"가 올 수 없고, "멤버 변수 선언"만 가능하기 때문이다. 그렇다면 "클래스에서 선언된 변수는 final 특성을 가지는게 아닌가?" 라는 생각을 해보았다. final 과 "클래스 선언부에서 값 재할당 불가"의 차이점자바에서 멤버 변수는 자동으로 final이 되지 않는다.즉, 클래스 선언부에서 값을 바로 재할당할 수 없다고 해서, 해당 변수가 final처럼 동작하는 것..
-
[Java] 인터페이스란?JAVA 2025. 2. 13. 00:12
인터페이스란?인터페이스는 객체의 사용 방법을 정의한 타입이다. 풀어서 설명하자면 인터페이스는 개발 코드와 객체가 서로통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 그렇게 때문에 개발 코드는객체의 내부 구조를 알 필요가 없고인터페이스의 메소드만 알고 있으면 된다. 개발 코드가 직접 객체의 메소드를 호출하면 간단한데왜 중간에 인터페이스를 두는지 의문점이 생긴다. 그 이유는 개발 코드를 수정하지 않고 사용하는 개체를 변경할 수 있도록 하기 위해서 이다. 인터페이스는 하나의 객체가 아니라 여러 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다. 따라서 개발 코드 측면에서는 코드변경..
-
[Java] 추상 클래스란?JAVA 2025. 2. 12. 22:11
추상클래스란?객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면이 클래스들의 공통적인 특성을추출해서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스와 실체 클래스는 상속의 관계를가지고 있다. 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성(필드와 메소드)을물려받고, 추가적인 특정을 가질 수 있다. 추상 클래스 선언추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙여야 한다. abstract 를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있다. 추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언을 할 수 있다. new 연산자로 직접 생성자를 호출할 수는 없지만 ..
-
[Java] 싱글톤이란?JAVA 2025. 2. 12. 21:55
실글톤이란?가끔 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우,단 하나만 생성 된다고 해서 이 객체를 싱글톤이라고 한다. 싱클톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야한다.생성자를 호출한 만큼 객체가 생성되기 대문이다. 외부에서 생성자를호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙여주면 된다. 그리고 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화 한다.참고로 클래스 내부에서는new 연산자로 생성자 호출이 가능하다. 정적 필드도 private 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하도록 막아야 한다.대신 외부에서 호출할 수 있는 정적 메소드를 선언하고정적 필드에서 참조하고 있는 자신의 객체..
-
[Java] StringTokenizer 사용 방법 / readLine(), nextToken() 차이점 <적용문제>JAVA 2024. 11. 22. 11:17
StringTokenizer 사용방법 StringTokenizer st = new StringTokenizer("변수", "구분자", "참"); StringTokenizer를 사용하는 방식은 4가지가 있다.① 변수만 지정할 경우 공백기준으로 문자열을 분리한다.② 구분자를 지정해 구분자 기준으로 문자열을 분리한다.③ 둘 이상의 구분자는 이어서 작성한다. ④ 구분자를 포함해 토근에 넣어 문자열을 분리한다. *주의사항*StringTokenizer은 import java.util.*; 을 추가해줘야 한다. 또한, String타입으로만리턴하기 때문에 String타입을 제외하곤 형변환을 해줘야 한다. 1. 띄어쓰기 기준으로 분리하기. StringTokenizer st = new String..
-
[Java] StringBuffer, StringBuilder, String 문자열 비교 <적용문제>JAVA 2024. 11. 12. 21:11
참조 타입의 비교 방법을 예전에 살펴보았다.String 변수 값을 비교할 땐 equals() 메소드를 사용해야 한다고 공부했었다. 자세한 내용은 아래 링크를 클릭하면 된다. 참조 타입과 참조 변수자바의 타입은 크게 기본 타입과 참고 타입으로 분류된다. 기본 타입은 정수 타입(byte, char, short, int, long), 실수 타입(float, double), 논리 타입(boolean)을 말하고 참고 타입으론 배열 타입, 열거 타입,opidea.tistory.com StringBuffer 문자열도 equals()로 비교하면 되는 줄 알았으나 아니였다. 결과: false StringBuffer클래스의 equals 메서드를 사용해도 등가비교연산자(==)로 비교한 것과 같다.toString()..