본문 바로가기

java

[swing] Event Dispatch Thread Swing(정확하게는 AWT)의 GUI 이벤트는 event dispatch thread라는 특수한 스레드에서 처리되며, Swing 객체의 메소드는 대부분 thread-safe하지 않기 때문에1 모든 Swing 이벤트 핸들링과 Swing 프레임웍을 다루는 코드 대부분은 event dispatch thread 상에서 실행되어야 한다.2 따라서 일반적인 Swing 애플리케이션의 main 메소드는 GUI를 구동하는 Runnable 객체를 생성하여, event dispatch thread에서 실행되도록 요청(invoke)하는 코드가 된다. Swing의 event dispatch thread에 이런 실행을 요청하는 방법은 SwingUtilities 클래스의 invokeLater 메소드3와 invokeAndWait .. 더보기
serializable 직렬화 컴퓨터에 저장했다가 다음에 다시 꺼내 쓸 수는 없을지 또는 네트웍을 통해 컴퓨터 간에 서로 객체를 주고 받을 수는 없을까라고 고민해 본 적이 있는가? 과연 이러한 일들이 가능할까?가능하다. 이러한 것을 직렬화가 처리해준다. 1. 직렬화란 직렬화(스트림으로)란 객체를 데이터 스트림으로 만드는 것을 뜻한다. 즉, 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다.반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(객체로)라고 한다.객체 스트림은 프로그램 메모리상에 존재하는 객체를 직접 입출력해 줄 수 있는 스트림으로 현재 상태를 보존하기 위한 영속성을 지원할 수 있다.자바에서 객체 안에 저장되어 있는 내용을 파일로 저장하거나 네트워크를 통하여 다른 곳으로.. 더보기
Thread Synchronized 공유 아래와 같은 방식으로 run()에서 공유할 객체에 접근하는 것이 가능해진다. 예) 쓰레드가 객체를 공유하게 되는 방식 1 - Runnable 인터페이스 상속?12345678910111213141516171819202122232425262728import java.util.*; class example { public static void main(String[] args) { RunnableImpl r = new RunnableImpl(); Thread t1 = new Thread(r); Thread t2 = new Thread(r); t1.start(); t2.start(); }} class RunnableImpl implements Runnable { int iv = 0; @Override pu.. 더보기
equals, hashcode equals() 와 hashcode()equals 는 두 객체의 내용이 같은지, 동등성(equality) 를 비교하는 연산자hashCode 는 두 객체가 같은 객체인지, 동일성(identity) 를 비교하는 연산자 다음과 같은 클래스가 있을때 equals() 를 이용한 두 객체의 동등성 비교는 올바른 결과가 나오지 않는다. public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { thi.. 더보기
Singletone pattern / Synchro * Singleton Pattern (싱글턴 패턴) - 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어진다. - 어디서든지 그 인스턴스에 접근할 수 있도록 한다. - 클래스에서 자신의 단 하나 뿐인 인스턴스를 관리하도록 만들면 된다. 싱글턴 패턴은 인스턴스가 하나 뿐인 특별한 객체를 만들 수 있게 해주는 패턴이다. 주로 쓰이는 용도는 아래와 같다. - 스레드 풀, 캐시, 대화상자, 사용자 설정, 디바이스 드라이버 등등 객체가 전체 프로그램에서 오직 하나만 생성되어야 하는 경우 그럼 전역 변수로 static 으로 선언해서 사용하면 되지 않을까? 만약 전역 변수로 객체를 생성하면 어플리케이션이 실행 될 때 객체가 생성 될 것이다. 그러나 그 객체가 자원을 많이 차지 한다면 사용도 되기 전에, 괜히 자원.. 더보기
override & overload [오버라이딩 & 오버로딩] 1. 다형성 자바에서는 다형성을 지원하기 위한 기능으로 override & overload 기능이 있다.overload - 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르면 다른 메소드로 인식하여 자바 내부에서 판단해주는 기술.override - 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하도록 해주는 기술. override , 재정의라고 한다. 이름이 비슷해 헷갈리기 쉬운 개념인데 확실히 알고 가야 객체지향 기반의 자바에서 중요한 3 요소를 이해할 수 있으니 잘 알아둬야 한다. 1-1. overload오버로딩(overloading)은 메소드 오버로딩과 생성자 오버로딩이 있다. 그러나 결국 같은 개념으로서 같은 이름의 함수를 여러개 정의하고 매개변수의 유형과 갯수.. 더보기
상속 - 2 1. 상속과 생성자 부모 클래스의 생성자가 없을 시에, 자식 클래스에게 부모 클래스를 상속시키려고 하면 에러메세지가 뜬다.이를 이용하여 상속에는 생성자가 관련되어 있음을 알 수 있다. 에러메세지를 읽어보면 부모클래스에 기본 생성자가 정의되지 않았다는 내용의 에러 메세지를 뿜는다. 강제로 A클래스를 호출해보면 A의 기본 생성자가 없다는 메세지가 뜬다. 그 이유는 부모클래스와 자식클래스의 상속 관계에서 부모클래스의 생성자를 먼저 실행하기 때문이다. 생성자를 이용해 부모클래스를 호출해 정보를 사용하는 시스템이라는걸 알 수 있는 부분이다. 결국 계속해서 자식은 부모를 호출하며, 부모클래스는 자신의 부모클래스를, 또 그 위 클래스를 연속해서 호출하게 되는데 이것을 연쇄 호출이라 한다. 그렇다면 맨위 클래스, 그러.. 더보기
상속 1. 개념 자바에는 상속이라는 개념이 있다.A extends B 라고 표현하며, A가 B를 상속한다. 라는 의미이다. 일상생활의 상속과 비슷한 의미로 이해하면 편하며, 그렇기 때문에 B에서 생성된 변수나 메소드를 똑같이 사용 가능하나 역으로 A에서만 생성된 변수 & 메소드를 B에서 사용하는 것은 불가능하다. extend의 영사전적 의미는 확대하다. 넓히다. 의 의미로서. 이 의미를 생각하고 공부하면 이해하기가 쉽다.A를 자식 클래스, B를 부모 클래스라고 할 때, 부모가 가지고 있는걸 자식이 사용하면서 자식이 개인적인 물품을 사용하는 방식이라 이해하면 된다. B에서 쓰는 변수와 메소드는 A에서 상속받아 사용이 가능하며, 또한 A에서 추가로 변수와 메소드의 생성이 가능하다. 위 사진에서 Employee 클.. 더보기
JAVA Static 변수 static 변수예를 들어 다음과 같은 클래스가 있다고 하자.public class HousePark { String lastname = "박"; public static void main(String[] args) { HousePark pey = new HousePark(); HousePark pes = new HousePark(); } } 박씨 집안을 나타내는 HousePark이라는 클래스이다. 위와 같은 클래스를 만들고 객체를 생성하면 객체마다 lastname을 저장하기 위한 메모리를 별도로 할당해야 한다. 하지만 가만히 생각해 보면 HousePark 클래스의 lastname은 어떤 객체이던지 동일한 값인 "박"이어야 할 것 같지 않은가? 이렇게 항상 값이 변하지 않는 경우라면 static 사용 시.. 더보기
JAVA Gabage Collecter [JVM GC] GC에 대해서 알아보기 전에 알아야 할 용어가 있다. 바로 'stop-the-world'이다. stop-the-world란, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다. Java에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 가비지 컬렉터(Garbage Collector)가 더 이상 필요 없는 (쓰레기) 객체를 찾아 지우는 작업을 한다. 이 .. 더보기

반응형