자바(Java)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발되었지만 현재 웹 애플리케이션 분야에 가장 많이 사용하는 언어 중 하나이고, 안드로이드를 비롯한 모바일 기기용 소프트웨어 개발에도 널리 사용되고 있다.
개요
Java 의 역사
- 1991년 선마이크로시스템스(오라클에 인수됨)의 제임스 고슬링이 C 언어를 모델로 연구 시작
- 1995년 JDK(Java Development Kit) 1.0 발표
- 1997년 JDK 1.1이 발표되면서 완전한 프로그래밍 언어의 모습을 갖춤
Java의 특징
- 구문이 간결함
- 명료한 객체지향 언어
- 이식성이 높고, 기계에 중립적
- 분산처리지원
- 멀티스레드(Multi-thread) 언어
기본 문법
변수와 데이터 형식
public class example {
public static void main(String args[]) {
int var1 = 10;
float var2 = 10.1f;
double var3 = 10.2;
char var4 = '안';
String var5 = "안드로이드";
System.out.println(var1);
System.out.println(var2);
System.out.println(var3);
System.out.println(var4);
System.out.println(var5);
}
}
char : 2byte를 사용하며 한글 또는 영문 1개만 입력
String : 여러 글자의 문자열을 입력
byte : 1byte를 사용하며 -128~+127 까지 입력
short : 2byte를 사용하며 -32768~+32767까지 입력
int : 4bvte를 사용하며 약 21억~+21억까지 입력
long : 8byte를 사용하며 상당히 큰 정수까지 입력 가능
float : 4bvte를 사용하며 실수를 입력
double : 8byte를 사용하며 실수를 입력. float보다 정밀도가 높음
boolean : true 또는 false를 입력
조건문: if, switch()~case
public class example {
public static void main(String[] args) {
int count = 85;
if (count >= 90) {
System.out.println("if statement: pass (A)");
} else if (count >= 60) {
System.out.println("if statement: pass");
} else {
System.out.println("if statement: fail");
}
int points = (count / 10) * 10;
switch (points) {
case 100, 90 -> System.out.println("switch statement: pass (A)");
case 80, 70, 60 -> System.out.println("switch statement: pass");
default -> System.out.println("switch statement: pass");
}
}
}
메소드와 전역변수, 지역변수
- 전역변수(global variable) : 모든 메소드에서 사용 가능함
- 지역변수(local variable) : 메소드 내부에서만 사용 가능함
public class example {
static int var = 100;
public static void main(String[] args) {
int var = 0;
System.out.println(var);
int sum = addFunction(10, 20);
System.out.println(sum);
}
static int addFunction(int num1, int num2) {
int hap;
hap = num1 + num2 + var;
return hap;
}
}
예외 처리: try~catch
- 프로그램 실행 중에 발생하는 오류를 Java는 try~catch문을 통해 처리
public class example {
static int var = 100;
public static void main(String[] args) {
int num1 = 100, num2 = 0;
try {
System.out.println(num1 / num2);
} catch (java.lang.ArithmeticException e) {
System.out.println("Divide by Zero");
}
}
}
클래스와 인스턴스
클래스 정의와 인스턴스 생성
- 객체지향 프로그래밍(Object-Oriented Programming, OOP)
- Java, C++, C# 등에서 사 용되는 프로그래밍 기술
- 클래스(class) = 변수(필드) + 메소드
class Car {
String color;
int speed = 0;
int getSpeed() {
return speed;
}
void upSpeed(int value) {
if (speed + value >= 200)
speed = 200;
else
speed = speed + value;
}
void downSpeed(int value) {
if (speed - value <= 0)
speed = 0;
else
speed = speed - value;
}
String getColor() {
return color;
}
}
public class example {
public static void main(String[] args) {
Car myCar1 = new Car();
myCar1.color = "red";
myCar1.speed = 0;
Car myCar2 = new Car();
myCar2.color = "blue";
myCar2.speed = 0;
Car myCar3 = new Car();
myCar3.color = "green";
myCar3.speed = 0;
myCar1.upSpeed(50);
System.out.println("The color of myCar1 is " + myCar1.getColor() + ", velocity is " + myCar1.getSpeed() + " km.");
myCar2.downSpeed(20);
System.out.println("The color of myCar2 is " + myCar2.getColor() + ", velocity is " + myCar2.getSpeed() + " km.");
myCar3.upSpeed(250);
System.out.println("The color of myCar3 is " + myCar3.getColor() + ", velocity is " + myCar3.getSpeed() + " km.");s
myCar3.downSpeed(20);
System.out.println("The color of myCar3 is " + myCar3.getColor() + ", velocity is " + myCar3.getSpeed() + " km.");
}
}
생성자로 인스턴스 만들기
public class Car {
String color;
int speed
Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
...
public class example {
public static void main(String[] args) {
Car myCar1 = new Car("red", 0);
Car myCar2 = new Car("blue", 0);
Car myCar3 = new Car("green", 0);
...
메소드 오버로딩
- 클래스 내에서 메소드의 이름이 같아도 파라미터의 개수나 데이터형만 다르면 여러 개 선언 가능
public class Car {
String color;
int speed;
Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
Car(int speed) {
this.speed = speed;
}
Car() {
}
void upSpeed(double value) {
if (speed >= 200)
speed = 200;
else
speed = speed + (int) value;
}
int getSpeed() {
return speed;
}
void upSpeed(int value) {
if (speed >= 200)
speed = 200;
else
speed = speed + value;
}
void downSpeed(int value) {
if (speed <= 0)
speed = 0;
else
speed = speed - value;
}
String getColor() {
return color;
}
}
정적 필드, 정적 메소드, 상수 필드
- 정적 필드(static field) : 클래스 자체에서 사용되는 변수
- 정적 메소드(static method) : 메소드 앞에 static 붙여 사용. 인스턴스 없이 ‘클래스명.메소드명()’으로 호출해서 사용
- 상수 필드 : 정적 필드에 초기값을 입력하고 final을 앞에 붙임
public class Car {
String color;
int speed;
static int carCount = 0;
final static int MAXSPEED = 200;
final static int MINSPEED = 0;
static int currentCarCount() {
return carCount;
}
Car(String color, int speed) {
this.color = color;
this.speed = speed; carCount++;
}
Car(int speed) {
this.speed = speed;
}
Car() {
}
void upSpeed(double value) {
if (speed >= 200)
speed = 200;
else
speed = speed + (int) value;
}
int getSpeed() {
return speed;
}
void upSpeed(int value) {
if (speed >= 200)
speed = 200;
else
speed = speed + value;
}
void downSpeed(int value) {
if (speed <= 0)
speed = 0;
else
speed = speed - value;
}
String getColor() {
return color;
}
}
정적 구성 요소 추가
public class example {
public static void main(String[] args) {
Car myCar1 = new Car("red", 0);
Car myCar2 = new Car("blue", 0);
Car myCar3 = new Car("green", 0);
System.out.println("The number of car produced (static field) ==> " + Car.carCount);
System.out.println("The number of car produced (static method) ==> " + Car.currentCarCount());
System.out.println("The upper limit of velocity ==> " + Car.MAXSPEED);
System.out.println("The value of PI ==> " + Math.PI);
System.out.println("3 to the 5th power ==> " + Math.pow(3, 5));
}
}