Java
-
테스트를 위하여 특정 객체로 FireMagican 클래스를 만들고 fireResistance, defense, hp, mana, title 이렇게 멤버 변수를 선언 해줍니다.FireMagician 객체를 생성합니다. FireMagician의 필드값들을 Field형식의 배열에 넣어줍니다. fireMagicianfields에 있는 field들을 이름과 값을 fireMagicianMap에 키값에 이름을, 밸류값에 값을 넣어 줍니다. 아래는 객체의 모든 멤버 변수의 값을 Collection(Map)에 넣어 출력한 결과 입니다.
(Java) 런타임 중 특정 객체의 모든 멤버 변수의 값을 Collection(Map) 혹은 Array에 넣는 방법테스트를 위하여 특정 객체로 FireMagican 클래스를 만들고 fireResistance, defense, hp, mana, title 이렇게 멤버 변수를 선언 해줍니다.FireMagician 객체를 생성합니다. FireMagician의 필드값들을 Field형식의 배열에 넣어줍니다. fireMagicianfields에 있는 field들을 이름과 값을 fireMagicianMap에 키값에 이름을, 밸류값에 값을 넣어 줍니다. 아래는 객체의 모든 멤버 변수의 값을 Collection(Map)에 넣어 출력한 결과 입니다.
2024.06.11 -
동시성 문제가 발생 할 수 있습니다. Thread를 특정 기능 및 로직에 의해 반복문 안에서 여러번 생성하고 실행되었을때 데이터 충돌이 일어나 동시성 문제가 발생합니다. 결괏값이 순차적으로 나오지 않는 논리적 문제가 발생하여 쓰레드 안정이 깨지는 상황이 발생합니다. 코드로 예를 들어 보겠습니다. 아래는 간단하게 사용자들이 회사 홈페이지를 조회하면 카운트가 올라가는 코드입니다. 코드를 run 했을 때 스레드로 조회하는 횟수가 100이고 그 횟수를 100번 더 반복하여 10000번의 조회가 나올 것을 예상할 수 있습니다. 하지만 결과는 다음과 같습니다. print되는 숫자들이 동시성이 없으며 순차적이지 않습니다. 동시성 문제는 Java Atomic Type, volatile, synchronized 같..
(Java) Thread와 Thread Local 등을 사용 할 때 발생 할 수 있는 위험 요소와 이에 대한 해결 방안에 대하여 (feat.Atomic Type, volatile, synchronized)동시성 문제가 발생 할 수 있습니다. Thread를 특정 기능 및 로직에 의해 반복문 안에서 여러번 생성하고 실행되었을때 데이터 충돌이 일어나 동시성 문제가 발생합니다. 결괏값이 순차적으로 나오지 않는 논리적 문제가 발생하여 쓰레드 안정이 깨지는 상황이 발생합니다. 코드로 예를 들어 보겠습니다. 아래는 간단하게 사용자들이 회사 홈페이지를 조회하면 카운트가 올라가는 코드입니다. 코드를 run 했을 때 스레드로 조회하는 횟수가 100이고 그 횟수를 100번 더 반복하여 10000번의 조회가 나올 것을 예상할 수 있습니다. 하지만 결과는 다음과 같습니다. print되는 숫자들이 동시성이 없으며 순차적이지 않습니다. 동시성 문제는 Java Atomic Type, volatile, synchronized 같..
2024.06.11 -
때로는 정적 메서드나 필드만 모은 클래스를 만들어야 할 때가 있습니다. 객체를 생성하지 않고 바로 사용하는 클래스가 필요할 때가 있습니다. static메서드와 static 필드만 들어있는 객체가 존재한다면 이 객체는 인스턴스로 만들 필요가 전혀 없습니다. 이런 경우 생성자를 외부에서 사용하지 못하도록 막아주면 안전하게 객체를 사용할 수 있는 장점이 있습니다. 아래처럼 클래스에서 private 생성자를 클래스에 추가하면 Instance 생성을 막을 수 있습니다. 테스트로 NPC 인스턴스를 생성하려고 하면 오류가 납니다.
(Java) Class의 Instance생성을 금지하는 방법에 대하여때로는 정적 메서드나 필드만 모은 클래스를 만들어야 할 때가 있습니다. 객체를 생성하지 않고 바로 사용하는 클래스가 필요할 때가 있습니다. static메서드와 static 필드만 들어있는 객체가 존재한다면 이 객체는 인스턴스로 만들 필요가 전혀 없습니다. 이런 경우 생성자를 외부에서 사용하지 못하도록 막아주면 안전하게 객체를 사용할 수 있는 장점이 있습니다. 아래처럼 클래스에서 private 생성자를 클래스에 추가하면 Instance 생성을 막을 수 있습니다. 테스트로 NPC 인스턴스를 생성하려고 하면 오류가 납니다.
2024.06.10 -
Abstract Class와 Interface는 둘 다 상속이 가능하고 구현해야 될 기능을 정의해 주지만 사용 목적에 따라 쓰임새가 다릅니다. Abstract Class와 Interface의 가장 큰 차이점은 다중 상속 가능 여부입니다. Abstract Class는 한 개의 클래스만 상속 가능하며 자식 클래스에 일반 메서드를 작성해서 물려줄 수 있습니다. 부모 클래스가 가진 기능들을 구현해야 할 때 사용합니다. Interface는 공통적인 기능이 필요할 때 사용합니다. 아래의 추상 클래스 예제로 설명드리겠습니다. 위에서 Magician과 Warrior는 공통적으로 Human이고 Human의 기능들을 상속받습니다. 하지만 각 추상 클래스의 속성이 다르므로 구현되어야 할 기능은 따로 정의됩니다. 따로 정의..
(Java) Abstract Class와 Interface 차이에 대하여Abstract Class와 Interface는 둘 다 상속이 가능하고 구현해야 될 기능을 정의해 주지만 사용 목적에 따라 쓰임새가 다릅니다. Abstract Class와 Interface의 가장 큰 차이점은 다중 상속 가능 여부입니다. Abstract Class는 한 개의 클래스만 상속 가능하며 자식 클래스에 일반 메서드를 작성해서 물려줄 수 있습니다. 부모 클래스가 가진 기능들을 구현해야 할 때 사용합니다. Interface는 공통적인 기능이 필요할 때 사용합니다. 아래의 추상 클래스 예제로 설명드리겠습니다. 위에서 Magician과 Warrior는 공통적으로 Human이고 Human의 기능들을 상속받습니다. 하지만 각 추상 클래스의 속성이 다르므로 구현되어야 할 기능은 따로 정의됩니다. 따로 정의..
2024.06.10