최신 버전 or 프로젝트에서 지정한 버전 (Java 8.0 이상 권장) 으로 설치한다.
Window -> Preference -> General -> Appearance -> Colors and Fonts -> Basic -> Text Font
Window -> Preference -> General -> Workspace
하단의 Text file encoding에서 Other 선택 후 UTF-8로 설정한다. Apply and Close
이렇게 하면 OS와 실행환경을 가지지 않아 한글이 깨지는 현상을 방지할 수 있다.
자바 개발모드로 변경한다.
Window -> Perspective -> Open Perspective -> Java
File -> New -> Java Project
src 폴더에서 마우스 우클릭 -> New -> Package
생성된 Package에서 마우스 우클릭 -> New -> Class
beans
Java bean들은 어떤 데이터를 관리하기 위한 목적으로 사용하거나, 어떤 유틸리티 성격(도구적인 성격)을 가진 Method를 포함한 Class들을 말한다.Package 생성하기
src 폴더에서 마우스 우클릭 -> New -> Package
Class 생성하기
생성된 Package에서 마우스 우클릭 -> New -> Class
// HelloWorldEn.java
package kr.co.softcampus.beans;
public class HelloWorldEn {
public void sayHello() {
System.out.println("Hello~~~!");
}
}
// MainClass.java
package kr.co.softcampus.main;
import kr.co.softcampus.beans.HelloWorldEn;
public class MainClass {
public static void main(String[] args) {
// HelloWorldEn 객체 생성
// 참조변수_타입 참조변수_이름 = new 클래스명();
HelloWorldEn hello1 = new HelloWorldEn();
callMethod(hello1);
HelloWorldEn hello2 = new HelloWorldEn();
callMethod(hello2);
}
public static void callMethod(HelloWorldEn hello) {
hello.sayHello();
}
}
< 자바 프로젝트의 문제점 >
만약에 HelloWorldEn 클래스가 아니라 HelloWorldKo 클래스를 변경해야 한다고 가정해보자.
기존에 HelloWorldEn 클래스가 사용된 모든 Java파일을 열어 HelloWorldKo 클래스로 일일이 수정해 주어야 한다는 불편함이 있다.
// HelloWorldKo.java
package kr.co.softcampus.beans;
public class HelloWorldKo {
public void sayHello() {
System.out.println("안녕하세요!");
}
}
// MainClass.java
package kr.co.softcampus.main;
import kr.co.softcampus.beans.HelloWorldEn;
import kr.co.softcampus.beans.HelloWorldKo;
public class MainClass {
public static void main(String[] args) {
// HelloWorldEn 객체 생성
// 참조변수_타입 참조변수_이름 = new 클래스명();
HelloWorldKo hello1 = new HelloWorldKo();
callMethod(hello1);
HelloWorldKo hello2 = new HelloWorldKo();
callMethod(hello2);
}
public static void callMethod(HelloWorldKo hello) {
hello.sayHello();
}
}
이렇게 Java 프로젝트에서 Class가 변경되면 객체 생성 부분과 참조변수 선언 부분 모두를 수정해주어야 한다.
다형성 개념을 이용해서 위에서 살펴보았던 자바 프로젝트의 불편함을 해소해 보자.
자바에서의 모든 객체는 부모 클래스형 참조변수나 구현한 인터페이스 변수에 담을 수 있다.
이러한 참조변수를 통해 메소드를 호출하면 오버라이딩된 메소드가 호출된다.
다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있음을 의미한다.
자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있다.
File -> New -> Java Project
위에서 샆펴 본 내용과 동일하므로 위의 내용을 참고한다.
src 폴더에서 마우스 우클릭 -> New -> Package
생성된 Package에서 마우스 우클릭 -> New -> Class
File -> New -> Java Project
생성된 Package에서 마우스 우클릭 -> New -> Interface
// HelloWorld.java
package kr.co.softcampus.beans;
/* HelloWorld 인터페이스를 구현하게 되면 추상메소드인 sayHello 메소드를 반드시 구현해야 한다.
* 인터페이스 타입인 HelloWorld 타입의 참조변수로 sayHello를 호출하면
* 이 인터페이스(HelloWorld)를 구현한 클래스에서 오버라이딩한 메소드로 호출할 수 있다.*/
public interface HelloWorld {
// 추상메소드
public void sayHello();
}
// HelloWorldEn.java
package kr.co.softcampus.beans;
public class HelloWorldEn implements HelloWorld {
@Override
public void sayHello() {
System.out.println("Hello~~~!");
}
}
// MainClass.java
package kr.co.softcampus.main;
import kr.co.softcampus.beans.HelloWorld;
import kr.co.softcampus.beans.HelloWorldEn;
public class MainClass {
public static void main(String[] args) {
// HelloWorld 타입의 HelloWorldEn 객체 생성
HelloWorld hello1 = new HelloWorldEn();
callMethod(hello1);
HelloWorld hello2 = new HelloWorldEn();
callMethod(hello2);
}
public static void callMethod(HelloWorld hello) {
// 여기서 sayHello 메소드는 HelloWorld 인터페이스 안에 존재하는 sayHello 추상메소드를 오버라이딩한 메소드
hello.sayHello();
}
}
다형성 개념을 이용해서 HelloWorldEn 클래스를 HelloWorldKo 객체로 변경해보자.
// HelloWorldKo.java
다음은 HelloWorldEn과 구조는 완전하게 동일하고 출력값만 다른 HelloWorldKo 클래스이다.
package kr.co.softcampus.beans;
public class HelloWorldKo implements HelloWorld{
@Override
public void sayHello() {
System.out.println("안녕하세요!");
}
}
// MainClass.java
MainClass에서는 Class를 가지고 객체를 생성하는 부분만 수정해주면 된다.
참조변수 선언 부분은 수정하지 않아도 된다.
package kr.co.softcampus.main;
import kr.co.softcampus.beans.HelloWorldEn;
import kr.co.softcampus.beans.HelloWorldKo;
public class MainClass {
public static void main(String[] args) {
HelloWorld hello1 = new HelloWorldKo(); // new HelloWorldEn();
callMethod(hello1);
HelloWorld hello2 = new HelloWorldKo(); // new HelloWorldEn();
callMethod(hello2);
}
public static void callMethod(HelloWorld hello) {
hello.sayHello();
}
}
< 다형성의 문제점 >
자바 프로젝트만을 사용했을 때보다는 유지보수가 훨씬 쉬워졌지만,
변경사항이 생겼을 때 기존에 HelloWorldEn 클래스 객체가 생성되는 부분을 포함한 모든 Java파일을 열어 HelloWorldKo 클래스 객체를 생성하도록 일일이 수정해 주어야 한다는 불편함은 여전히 남아있다.