Web(54)
-
[JAVA] 추상클래스(Abstracat)
1. 추상 클래스(Abstract Class) 란? 일반적인 클래스는 구체적으로 데이터를 담아 인스턴스화 하는 클래스 특정 개발시점에 내용을 확정지으면 안되거나 계획(틀)만을 세울 때 추상적인 데이터를 담고있는 클래스 하나 이상의 추상 메소드를 보유함으로써 클래스를 불완전한 상태로 선언하여 서브 클래스로 하여금 메소드 오버라이드를 통해 추상메소드를 완성하도록 구현을 강제한다. 2. 특징 추상 메소드와 일반 메소드를 선언할 수 있다. 추상 클래스를 상속받는 모든 서브 클래스들은 추상 메소드를 반드시 재정의(강제구현)해야한다. new 연산자 사용을 통한 인스턴스화가 불가하다. 추상 클래스를 선언 할 때에는 abstract 키워드를 사용해야한다. abstract class 클래스{ ... public abst..
2024.03.07 -
[JAVA] 멀티스레드 환경에서 문제와 대책
1. Thread 프로그램이 실제로 실행되어, 메모리나 CPU와 같은 자원을 할당 받으면 이를 프로세스라고 부른다. 스레드는 프로세스 내에서 실제로 작업을 수행하는 한 단위 모든 프로세는 하나 이상의 스레드가 존재하고, 두개 이상의 스레드를 낮는 프로세스를 멀티 스레드 프로세스라고 한다 프로세스는 독자적으로 메모리를 할당받아 서로의 메모리를 공유할수 없지만, 프로세스 내부의 스레드는 같은 자원을 공유하여 사용이 가능하다. 여러 스레드를 사용하여 병렬 프로그래밍을 하게되면 웹 서버에서는 빠른 응답이 가능하다는 장점이 있다. 여러 스레드가 하나의 자원을 공유하고 있기 때문에 스레드 간 경쟁상태가 발생할수 있고, 이는 동시성 문제 2. 동시성 문제 해결 암시적 Lock 사용 가장 간단하면서 쉬운방법 Lock을..
2024.02.26 -
[JAVA] equals(), hashCode()
equals() 2개의 객체가 동일한지 검사하기 위해서 사용된다. 프로그래밍 상 객체는 서로 다른 메모리에 띄워져있으므로 동일한 객체가 아니다. 하지만 같은 값을 지니므로 같은 객체로 인식되어야하는데, 이러한 동등성을 위해서 우리는 값으로 객체를 비교하도록 equals() 함수를 오버라이딩 해주는 것이다. 1. 메소드를 재정의 해야하는 경우 동일성이 아닌 동등성을 지원해야 할 경우 : Date나 Integer 같이 Value Object 또는 Value Class가 해당 상위 equals() 가 하위의 equals 를 충족하지 못하는 경우 2. 메소드를 재정의 하지 않아도 되는 경우 각 객체가 고유한 경우 : Active Entity, Thread 와 같은 경우 클래스의 동치성 검사방법이 존재하지 않아도..
2024.02.26 -
[JAVA] 컴파일 과정
1. 전체 실행 과정 2. JVM 타겟 플랫폼에 맞춰서 컴파일 해야한다는 단점을 보완하기 위해 나온 플랫폼 Java의 바이트 코드는 JVM이라는 가상머신 위에서 돌아감으로써 문제를 해결 JVM이 설치된 플랫폼이면 어디든 똑같이 바이트코드가 동작 3. 바이트코드 변환 개발자가 .java 파일을 생성하고 Build를 하게되면 자바 컴파일러의 javac라는 명령어를 사용하여 자바 바이트코드로 구성된 .class파일을 생성하게 됩니다. 바이트코드는 JVM과 같은 가상머신이 이해할수있는 언어이고, 바이너리 코드는 CPU가 이해할 수 있는 언어이다. 4. 클래스 로더와 실행 엔진 Bootstrap Class Loader : 가장 기본적인 자바 API를 로드하는 클래스로더 Extension Class Loader :..
2024.02.26 -
[JAVA] String / StringBuffer / StringBuilder
자바에서는 대표적으로 문자열을 다루는 자요형 클래스로 String / StringBuffer / StringBuilder 3가지 자료형을 지원한다. 3가지 자료형은 사용 목적에 따라 쓰임새가 달라지게 된다. StringBuffer r 클래스 StringBuffer 클래스는 문자열을 연산(추가하거나 변경) 할 때 주로 사용하는 자료형 물론 String 자료형 만으로도, + 연산이나 concat() 메소드로 문자열을 이어붙일 수 있다. 하지만 이는 새로운 인스턴스를 생성하게 되어, 공간의 낭비 뿐만 아니라 속도도 느려지게된다. String result = ""; result += "hello"; result += " "; result += "jump to java"; System.out.println(res..
2024.02.23 -
[JAVA] Immutable(불변) / Mutable(가변)
1. 가변(Mutable) 객체 가변 객체는 값을 변경할 수 있는 객체 여기서 값은 메모리의 주소를 의미합니다. 가변 객체의 경우 값을 변경한다고 해서 저장되어있는 메모리의 위치가 변하지 않습니다. 언제든지 값을 바꿀수 있다보니, 멀티 스레드 환경에서 사용하려면 별도의 동기화 처리가 필요합니다. 대표적인 가변객체로는 ArrayList, HashMap, StringBuilder, StringBuffer 2. 불변(Immutable) 객체 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태를 변경 할 수 없는 객체 불변 객체는 멀티스레드 환경에서도 안전하게 사용할 수 있다는 신뢰성 보장하며, 대표적으로 String등 이 존재한다 이외에도 커스텀 객체를 생성하여 내부 상태가 변경되지 않게 만들면(pr..
2024.02.23