1995년 자바의 아버지라고 불리는 제임스 고슬링과 그의 동료들에 의해서 시작된 프로젝트다. Java는 원래 가전제품을 제어하기 위한 언어로 고안되었지만 웹의 등장으로 엄청난 성공을 거두면서 주류 언어가 되었다. 역사에 대한 더 자세한 내용은 직접 찾아보자.
한국에서는 정부나 기업의 시스템 통합 프로젝트가 대부분 자바로 구현되기 때문에 자바는 기업용 시장에서 두각을 나타내고 있다. 모바일 플랫폼인 안드로이드가 대성공을 거두면서 자바의 수요가 급증했다.
Java
: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic language주요 특징들
간단하다 (Simple)
객체 지향적이다 (Object-oriented)
인터프리터 언어이다 (Interpreted)
강력하다 (robust)
안전하다 (Secured)
플랫폼 독립적이다 (Platform independent)
멀티 쓰레딩을 지원한다 (Multithreaded)
동적이다 (Dynamic)
출처 - TCP스쿨
Java SE (Standard Edition)
JDK (Java Development Kit)
JRE(Java Runtime Environment)
Java EE (Enterprise Edition)
Jave Me (Micro Edition)
JVM(Java Virtual Machine)
출처 - 생활코딩
자바 프로그램은 한 개 이상의 클래스(class)로 구성됩니다.
이러한 클래스는 한 개 이상의 필드(field)나 메소드(method)로 구성됩니다.
class 클래스이름 {
필드의 선언
필드의 선언
...
메소드의 선언
메소드의 선언
...
}
class Test {
int field1;
String field2;
public void method1() {
System.out.println("자바 프로그래밍!!");
}
}
System.out.println(출력할데이터);
System.out.print(7); // print() 메소드는 줄 바꿈을 하지 않음.
System.out.println(3); // 정수 출력
System.out.println(3.14); // 실수 출력
System.out.println("자바!"); // 문자열 출력
System.out.println("문자열끼리의 " + "연결도 가능합니다.");
System.out.println("숫자" + 3 + "과 문자열의 연결도 가능합니다.");
/* 클래스 블록 */
public class 클래스명 {
/* 메소드 블록 */
[public|private|protected] [static] (리턴자료형|void) 메소드명1(입력자료형 매개변수, ...) {
명령문(statement);
...
}
/* 메소드 블록 */
[public|private|protected] [static] (리턴자료형|void) 메소드명2(입력자료형 매개변수, ...) {
명령문(statement);
...
}
...
}
보통 이렇게 하나의 자바파일에 여러개의 클래스를 작성하는 경우에는 하나의 대표 클래스를 지정하고 파일명과 동일하게 하는 것이 코드의 가독성에 도움이 된다
package java01;
// 1. 클래스 생성
public class GuGu {
public void dan(int n) {
// System.out.println(n*1);
// System.out.println(n*2);
// System.out.println(n*3);
// System.out.println(n*4);
// System.out.println(n*5);
// System.out.println(n*6);
// System.out.println(n*7);
// System.out.println(n*8);
// System.out.println(n*9);
for (int i = 1; i < 10; i++) { // i에 1~9 까지의 값이 반복하여 대입된다.
System.out.println(n * i);
}
}
// 2. main 메소드
public static void main(String[] args) {
// 3. 변수
// int n = 3;
GuGu gugu = new GuGu(); // GuGu 클래스의 객체 생성
// gugu.dan(n); // 객체를 통해 dan 메소드를 호출
// gugu.dan(2);
// gugu.dan(3);
// gugu.dan(4);
// gugu.dan(5);
// gugu.dan(6);
// gugu.dan(7);
// gugu.dan(8);
// gugu.dan(9);
for (int i = 2; i < 10; i++) {
gugu.dan(i);
}
}
}
참고자료
자바 객체지향 프로그래밍
여기서 자동차는 하나의 객체(object)라고 할 수 있으며, 색상, 크기, 모델, 속도 등과 같이 객체가 지니고 있는 특성 또는 속성은 상태(state)를 의미하고, 속도를 올린다, 속도를 줄인다, 경적을 울린다 등은 객체가 할 수 있는 행동(behavior)을 말합니다. 정리하자면, 객체는 상태와 행동으로 이루어져 있다고 할 수 있습니다. 아래와 같이 또다른 예들을 생각해볼 수 있습니다.
우리가 이처럼 객체의 수많은 특성 중에서 덜 중요한 부분은 뒤로 빼고 핵심이 되는 특성을 간추려 내는 작업을추상화(abstraction)
라고 말합니다. 이 추상화는 객체 지향 프로그래밍의 4대 특성 중 하나로서 객체 모델링이라고 부르기도 합니다. 추상화로 얻게 되는 장점에 대해서는 직접 추상화를 여러 번 해보면서 차차 알아나가도록 하겠습니다.
여기서 설명한 객체라는 개념은 컴퓨터 프로그래밍에도 적용이 되는데,객체의 상태
는 프로그래밍에선필드(field) 또는 속성(property)
이라고 부르고행동
은메서드(method)
라고 부릅니다. 우리는 메서드를 '어떤 작업을 수행하는 문장들을 묶어놓은 것'이라고 배웠지만 큰 틀에서 살펴보면메서드는 객체의 행동
이라고 할 수 있습니다.
클래스를 인스턴스화한다 = 객체를 생성한다
클래스
란 바로 어떤객체
를 만들기 위해서필드나 메서드를 정의
하는 일종의틀 또는 설계도
라고 할 수 있습니다. 클래스는 실체가 있는 게 아니라 추상적인 개념에 불과하므로 처음에 받아들이기가 다소 힘들 수 있습니다. 객체와 클래스의 이해를 돕기 위해서 단골로 등장하는 비유가 하나 있는데 한번 살펴보도록 하겠습니다.
위 그림처럼붕어빵틀
을 설계도인클래스
에 빗대고, 붕어빵틀로 만들어진결과물
인붕어빵
을객체
에 빗댈 수 있습니다. 붕어빵틀은 저마다 다른 크기, 모양의 붕어빵을 만들며, 하나의 붕어빵틀을 가지고 들어가는 재료(속성) 등에 따라서 각기 다른 고유한 붕어빵이 만들어집니다. 그리고 우리는 붕어빵틀로 붕어빵을 찍어내기 전까지는 붕어빵을 먹을 수 없습니다. 클래스도 이와 비슷하게 클래스 내부에 선언 또는 정의되어 있는 필드나 메서드를 이용하려면 먼저 클래스를 통해 객체를 만들어야 합니다.
대부분의 자바 개발자들은 일상적인 대화에서 객체(object)와 인스턴스(instance)를 혼용해서 사용합니다. 그렇게 해도 의사소통에 문제가 없으며 서로 무엇을 가리키는지 알기 때문입니다. 혼란을 피하기 위해서 앞으로 두 용어를 혼용하지 않고 객체로 통일할 것입니다. 하지만 자바같은 클래스 기반 언어에서 객체와 인스턴스의 사이에는 미세한 차이가 있습니다.
이해를 돕기 위해서 예를 들어봅시다. 우리가집
을 만든다고 가정할 때, 집을 만드려면 각 실의 위치나 넓이 등을 결정하기 위해서 먼저설계도
가 필요합니다.설계도가 완성된 후, 해당 설계도를 기반으로 만들어진 똑같은 집들은 모두 객체라고 부를 수 있습니다.
하지만 이렇게 같은 설계도로부터 만들어진 집은 모두 똑같기에 어떤 집 하나를 가리키려 할 때 어려움이 생깁니다. 따라서,번호와 같은 고유한 표시를 부여
하여 각 집을 구분했습니다. 이때각각의 집을 인스턴스
라 부를 수 있습니다. 동일하게,철수와 영희는 모두 사람 객체이지만 철수와 영희를 따로 봤을 때는 고유한 인스턴스라 할 수 있습니다.
느낌이 좀 오시나요?
출처 - 객체와 클래스
💬 간단하게 개요 살피기