728x90

저번 시간에 AWT에 대해서 간략하게 배웠다.

AWT만으로도 충분한 GUI프로그래밍을 할 수 있지만 보통 AWT를 래핑된 Swing을 쓰게된다.

사실 AWT와 Swing은 서로 지향점이 다르다. Swing은 완전히 AWT를 포함하는 개념은 아니라는 것이다.


AWT의 문제점이라면 각각의 운영체제 종속되는 성향이 강하다는 것이다.

각각의 운영체제의 Look and Feel을 지켜주는것은 매력적이긴 하지만 각각의 운영체제별로 관리해주길 귀찮다는 것이다.

게다가 AWT는 자체적인 기능의 제약이 많다. 사실 이는 Swing도 가지는 문제점이긴 하나 Swing보다도 더 기능이 적다는 문제점이 있다.

따라서 실제로 AWT로 제대로된 기능을 넣기위해서는 여러가지 트릭을 쓰거나 클래스를 상속하거나 자체 프레임워크를 만드는등의

꽤나 귀찮은 수고를 해줘야한다는 근본적인 문제점 역시 내포하고 있다.

게다가 가장 큰문제점은 AWT의 장점인 각각의 Look and Feel을 지켜준다는건데 그렇다면 SWT가 훨씬 좋다.

물론 간단하다는 장점은 있긴한데 GUI프로그래밍은 보통 간단한걸 하려고 하는 프로그래밍은 아니다.


반면 Swing의 경우 Native자바로 되어있어 어떤 환경이든 비슷한 GUI를 보야준다는 차별점이 있다.

맥에서는 조금 예외긴한데 어찌됬건 어떤 환경이건 비슷한 GUI를 보여주고 AWT에 비해서 기능도 많고 쓰기도 편하다.

그래서 일반적으로 GUI프로그래밍을 사용할 경우 제일 먼저 고려 되는것은 Swing이다.

단점이라면 Swing 역시 그리 기능이 많지 않다는 것 정도? 사용하려면 자체 프레임워크나 상속을 사용하는 경우가 많다는것 정도 되겠다.

하지만 배울 가치는 분명 있다. 비록 성능은 좀 구리지만 애당초 성능이 크리티컬하게 중요한 부분이 아닌 작업을 하는 경우가 많으며

기본적으로 자바에 포함되어있기 때문이다.


이제 Swing에 대해서 알아가보도록 하자. Swing의 경우 AWT를 래핑한 것이라고 하였다.

따라서 사용방법은 AWT의 그 방법과 매우매우매우 유사하다고 할 수 있다.

전의 AWT코드를 한번 떠올려 보자.


import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextField;

public class HelloAWT {

public static void main(String[] args) {
Frame fr = new Frame("This 프레임");
Panel pn = new Panel();
TextField tf = new TextField();

pn.add(tf);
fr.add(pn);
tf.setText("This is 텍스트");

fr.setSize(300, 200);
fr.setVisible(true);
}

}


이제 이코드를 Swing코드로 한번 옮겨볼 것이다.


import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class HelloAWT {

public static void main(String[] args) {
JFrame fr = new JFrame("This 프레임");
JPanel pn = new JPanel();
JTextField tf = new JTextField();

pn.add(tf);
fr.setContentPane(pn);
tf.setText("This is 텍스트");

fr.setSize(300, 200);
fr.setVisible(true);
}

}


코드가 크게 변화하지는 않았다.

그런데 모든 component에 J라는 접두사가 붙었다.

그렇다 이제 swing을 사용하려면 J접두사가 붙은 component를 사용해양한다.

붙지않은 것은 awt component인데 사용못하는것은 아니나 사용이 권장되지 않는다.

되도록 사용하지 않도록하자.


또한 새로운 요소로 컨탠트 팬이라는 요소가 있는데

awt에서는 frame안에 panel을 넣었는데 swing에서는 그렇게 하지않고 frame의 컨탠트팬이라는 요소로 panel을 지정한다.

아직 중요한 요소는 아니므로 그냥 frame에 항상 컨탠트팬으로 panel을 셋팅한다고 생각해도 큰 무리는 없다.

Swing예제를 실행하여 보자.



생각보다 이질적인 느낌이 많이 들것이다. 맥은 좀 덜한데 그 이유는 맥은 Swing의 사상을 무시하고 지 멋대로 만들어서 그렇다.

'Programming > Java-Swing' 카테고리의 다른 글

[Swing-06]Event-Key  (0) 2017.10.24
[Swing-05]Event-Action  (0) 2017.10.21
[Swing-04]Layout(배치관리자)  (0) 2017.10.20
[Swing-03]Component  (0) 2017.10.18
[Swing-01]AWT  (0) 2017.10.18

+ Recent posts