자바(Java)는 객체 지향 프로그래밍(OOP) 언어로, 많은 언어들 중에서도 가장 많이 사용되는 언어 중 하나입니다. 자바를 이용하여 웹 애플리케이션, 모바일 애플리케이션, 게임 등 다양한 프로그램을 개발할 수 있습니다. 이번 글에서는 자바의 기본 문법에 대해서 설명하겠습니다.
클래스(class)는 객체를 생성하기 위한 틀(template) 역할을 합니다.
객체(object)는 클래스를 바탕으로 생성된 인스턴스(instance)입니다.
클래스를 작성할 때는 클래스 이름, 멤버 변수, 메서드 등을 정의합니다.
객체를 생성하려면 new 키워드를 사용하고, 클래스 이름과 생성자(constructor)를 호출합니다.
// Person 클래스 선언
public class Person {
// 멤버 변수(private으로 선언)
private String name;
private int age;
// 생성자(constructor)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getName 메소드 선언
public String getName() {
return name;
}
// getAge 메소드 선언
public int getAge() {
return age;
}
}
// Main 클래스 선언
public class Main {
// main 메소드 선언
public static void main(String[] args) {
// Person 객체 생성
Person person = new Person("홍길동", 30);
// 이름과 나이 출력
System.out.println("이름: " + person.getName() + ", 나이: " + person.getAge());
}
}
변수(variable)는 데이터를 저장하기 위한 메모리 공간으로, 값을 변경할 수 있습니다.
상수(constant)는 값을 변경할 수 없는 변수입니다. final 키워드를 사용하여 선언합니다.
// 변수와 상수를 선언하고 값을 출력하는 코드
public class Main {
public static void main(String[] args) {
// 변수 선언과 초기화
int x = 10;
// 상수 선언
final double PI = 3.141592;
// 문자열 변수 선언
String name = "김철수";
// 변수와 상수 값을 출력
System.out.println("x의 값: " + x);
System.out.println("PI의 값: " + PI);
System.out.println("이름: " + name);
}
}
변수의 자료형(type)은 int, double, String 등이 있으며, 자료형에 따라 저장 가능한 값의 범위가 달라집니다.
int myNum = 5;
float myFloatNum = 5.99f;
char myLetter = 'D';
boolean myBool = true;
String myText = "Hello";
조건문(if-else, switch)은 조건식에 따라 코드를 실행하거나 건너뜁니다.
반복문(for, while, do-while)은 코드를 반복해서 실행합니다.
// 조건문과 반복문을 사용한 예제 코드
public class Main {
public static void main(String[] args) {
// score 변수를 선언하고 초기화
int score = 80;
// if-else문을 이용한 학점 출력
if(score >= 90) {
System.out.println("A 학점입니다.");
} else if(score >= 80) {
System.out.println("B 학점입니다.");
} else if(score >= 70) {
System.out.println("C 학점입니다.");
} else {
System.out.println("F 학점입니다.");
}
// for문을 이용한 1부터 5까지의 정수 출력
for(int i=1; i<=5; i++) {
System.out.println(i);
}
// while문을 이용한 1부터 5까지의 정수 출력
int j = 1;
while(j <= 5) {
System.out.println(j);
j++;
}
}
}
배열(array)은 같은 자료형의 여러 개의 값을 저장하기 위한 자료 구조입니다.
배열을 선언할 때는 자료형과 크기를 지정합니다.
// 배열을 사용한 예제 코드
public class Main {
public static void main(String[] args) {
// 5개의 int형 요소를 저장할 수 있는 배열 선언 및 생성
int[] numbers = new int[5];
// for문을 사용하여 배열에 요소를 저장
for(int i=0; i<numbers.length; i++) {
numbers[i] = i+1;
}
// for문을 사용하여 배열의 요소를 출력
for(int i=0; i<numbers.length; i++) {
System.out.println(numbers[i]);
}
}
}
메서드(method)는 특정 기능을 수행하기 위한 코드의 집합입니다.
메서드는 호출되어야 실행됩니다.
메서드는 반환값(return type)이 있는 경우와 없는 경우가 있습니다.
// 메서드를 사용한 예제 코드
public class MyClass {
// 매개변수로 name을 받아 "Hello "와 함께 출력하는 myMethod 메서드
static void myMethod(String name) {
System.out.println("Hello " + name);
}
public static void main(String[] args) {
// myMethod 메서드 호출
myMethod("John");
}
}
예외(exception)는 프로그램에서 발생하는 오류입니다.
예외 처리는 예외가 발생할 경우, 해당 예외를 처리하는 방법을 정하는 것입니다.
try-catch-finally 블록을 사용하여 예외 처리를 구현할 수 있습니다.
// 예외 처리를 사용한 예제 코드
public class Main {
public static void main(String[] args) {
int x = 10, y = 0;
try {
// 0으로 나누기를 시도하는 코드
int z = x / y;
} catch (ArithmeticException e) {
// ArithmeticException 예외가 발생한 경우 실행될 코드
System.out.println("0으로 나눌 수 없습니다.");
} finally {
// 예외 발생 여부와 관계없이 항상 실행될 코드
System.out.println("프로그램이 종료되었습니다.");
}
}
}
자바에서는 클래스(Class) 간 상속(Inheritance) 관계를 설정할 수 있습니다. 상속 관계를 설정하는 방법은 다음과 같습니다.
// 클래스 상속을 사용한 예제 코드
class Animal {
// 동물 소리 출력하는 메서드
public void animalSound() {
System.out.println("The animal makes a sound");
}
}
class Pig extends Animal {
// 돼지 소리 출력하는 메서드
public void animalSound() {
System.out.println("The pig says: wee wee");
}
}
public class MyMainClass {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myPig = new Pig();
// Animal 클래스의 animalSound 메서드 호출
myAnimal.animalSound();
// Pig 클래스의 animalSound 메서드 호출
myPig.animalSound();
}
}
자바에서는 인터페이스(Interface)를 사용하여 클래스(Class) 간의 통신 규약을 정의할 수 있습니다. 인터페이스는 다음과 같이 정의됩니다.
// 인터페이스를 사용한 예제 코드
interface Animal {
// 동물 소리 출력하는 메서드
public void animalSound();
// 동물 달리는 것을 출력하는 메서드
public void run();
}
class Pig implements Animal {
// 돼지 소리 출력하는 메서드
public void animalSound() {
System.out.println("The pig says: wee wee");
}
// 돼지가 달리는 것을 출력하는 메서드
public void run()
자바에서는 패키지(Package)를 사용하여 클래스(Class)를 그룹으로 묶을 수 있습니다. 패키지는 다음과 같이 정의됩니다.
package mypackage; // 패키지 선언
public class MyClass {
int x = 5;
}
자바에서는 클래스(Class), 메소드(Method), 변수(Variable)의 접근을 제한할 수 있습니다. 접근 제어자(Access Modifiers)는 다음과 같이 사용됩니다.
public class MyClass {
public int x = 5; // public : 모든 클래스에서 접근 가능
protected int y = 10; // protected : 같은 패키지 내의 클래스와 상속받은 클래스에서만 접근 가능
private int z = 15; // private : 같은 클래스 내에서만 접근 가능
public static void main(String[] args) {
MyClass myObj = new MyClass();
System.out.println(myObj.x);
System.out.println(myObj.y);
System.out.println(myObj.z);
}
}
자바에서는 클래스(Class)의 인스턴스(Instance)를 생성하지 않고도 클래스의 변수(Variable)와 메소드(Method)를 사용할 수 있습니다. 정적(Static) 변수와 메소드는 다음과 같이 사용됩니다.
public class MyClass {
static int x = 5; // 클래스에 속하는 멤버인 정적 변수와 정적 메소드를 선언할 때 사용
static void myMethod() {
System.out.println("Static methods can be called without creating objects");
}
public static void main(String[] args) {
System.out.println(x);
myMethod();
}
}
이상으로 자바의 기본 문법에 대해 간략히 알아보았습니다. 자바의 문법을 잘 이해하면, 좀 더 복잡한 프로그램도 쉽게 작성할 수 있습니다. 기본 문법을 잘 이해하면, 자바의 다양한 라이브러리나 프레임워크를 쉽게 이해하고 사용할 수 있습니다.