GridLayout과 GridBagLayout의 핵심 차이점
GridLayout은 모든 컴포넌트를 하나의 사각형 그리드에 배치하며, 이 그리드는 크기가 동일한 사각형 셀로 나뉩니다. 따라서 각 컴포넌트는 반드시 하나의 셀 안에 배치됩니다. 반면 GridBagLayout은 컴포넌트를 가로·세로 방향으로 자유롭게 정렬할 수 있는 유연한 레이아웃 관리자로, 컴포넌트들의 크기가 서로 같을 필요가 없습니다.
각 GridBagLayout 객체는 동적인 사각형 셀 그리드(cell grid)를 유지하며, 각 컴포넌트는 하나 이상의 셀을 차지할 수 있습니다. 이때 컴포넌트가 실제로 차지하는 영역을 컴포넌트 표시 영역(Component Display Area)이라고 부릅니다.
GridLayout이란?
GridLayout은 컴포넌트를 사각형 그리드 형태로 배치하는 레이아웃입니다. 컴포넌트들은 행(row)과 열(column)로 구성된 셀에 순서대로 배치되며, 모든 셀의 크기는 동일합니다. 생성자인 GridLayout(int rows, int columns)는 행과 열 두 개의 매개변수를 받아 그리드 구조를 결정합니다.
GridLayout 예제 코드
import java.awt.*;
import javax.swing.*;
public class GridLayoutTest {
GridLayoutTest() {
JFrame frame = new JFrame("GridLayout Test");
JButton button1, button2, button3, button4;
button1 = new JButton("Button 1");
button2 = new JButton("Button 2");
button3 = new JButton("Button 3");
button4 = new JButton("Button 4");
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.setLayout(new GridLayout(2, 2));
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new GridLayoutTest();
}
}실행 결과

위 예제에서는 2행 2열의 그리드를 생성했기 때문에 네 개의 버튼이 모두 같은 크기의 셀에 균등하게 배치되는 것을 확인할 수 있습니다.
GridBagLayout이란?
GridBagLayout은 GridLayout의 기능을 확장한 레이아웃입니다. GridLayout처럼 그리드의 각 셀에 컴포넌트를 배치할 수 있을 뿐만 아니라, 컴포넌트가 여러 열이나 여러 행에 걸쳐(span) 배치될 수 있도록 허용합니다.
GridBagLayout을 사용하려면 먼저 GridBagConstraints 객체를 생성하고, 컴포넌트의 위치·크기·정렬 방식 등에 해당하는 적절한 속성값들을 설정해야 합니다. 대표적인 속성으로는 그리드상의 좌표를 지정하는 gridx, gridy가 있으며, 이 외에도 gridwidth, gridheight, weightx, weighty, fill, insets 등 다양한 제약 조건을 활용하면 훨씬 정교한 화면 구성이 가능합니다.
GridBagLayout 예제 코드
import javax.swing.*;
import java.awt.*;
public class GridBagLayoutTest extends JFrame {
public GridBagLayoutTest() {
setTitle("GridBagLayout Test");
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 5;
gbc.gridy = 0;
add(new JButton("Button1"), gbc);
gbc.gridx = 0;
gbc.gridy = 5;
add(new JButton("Button2"), gbc);
gbc.gridx = 2;
gbc.gridy = 4;
add(new JButton("Button3"), gbc);
}
public static void main(String[] args) {
GridBagLayoutTest gbcTest = new GridBagLayoutTest();
gbcTest.setSize(300, 300);
gbcTest.setVisible(true);
gbcTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}실행 결과

위 예제에서는 gridx와 gridy 값을 다르게 설정하여 세 개의 버튼이 그리드 상에서 서로 다른 위치에 자유롭게 배치된 것을 볼 수 있습니다. 이처럼 GridBagLayout은 셀 크기나 위치를 세밀하게 제어해야 하는 복잡한 UI를 만들 때 특히 유용합니다.
정리: 어떤 레이아웃을 선택해야 할까?
- GridLayout: 계산기 버튼 배열처럼 모든 셀의 크기를 균등하게 유지해야 하는 간단한 격자형 UI에 적합합니다.
- GridBagLayout: 컴포넌트마다 크기가 다르거나 여러 셀에 걸쳐 배치해야 하는 복잡하고 유연한 화면 구성에 적합합니다.