자바(Java)

썬 마이크로 시스템즈에서 개발한 객체지향 언어

객체지향언어, 플랫폼독립적, 네트워크지향적, 뛰어난 이식성, 멀티스레드 기능, 친근한 코드

 

널값 (null)

어떤 값도 갖고 있지 않음, 즉 어떠한 객체도 참조하고 있지 않다는 것을 뜻힌다.

Date today = null; // 참조변수 초기화

String grade = null; // 참조변수는 널로 초기화할수 있다.

String grade = " "; // 하지만 String형은 보통 빈 문자열로 초기화 한다.

 

클래스

1. 객체의 특성과 행위를 정의

2. 클래스는 객체가 아니며 객체를 만들기 위한 용도로 사용됨

3. 클래스명은 대문자로 시작하고 각 단어마다 첫 글자는 대문자로 구분함 (: Person, ControllerServlet)

파스칼 표기법

두 단어 이상의 변수명이 들어왔을때 첫번째와 두번째 단어의 첫글자를 대문자로 표기하는 방법

4. 클래스는 멤버변수, 멤버메소드, 생성자로 이루어진다.

클래스의 객체생성 예제

Hello h1; <- 스택메모리에 4바이트(32비트)의 공간을 할당받은 객체변수(주소값이 할당되는 변수) h1을 선언한다.

h1 = new Hello(); <- 힙메모리에 Hello 클래스의 객체 h1을 생성한다.

 

기본적인 클래스 예제

class tv {

String color;

boolean power;

int channel;

void power() { power = !power; }

void channelup() { channel++; }

void channeldown() { channel--; }

}

 

public class HelloJava {

public static void main(String[] args) {

                // 참조변수는 4바이트의 주소값을 갖는다.

tv t1; // 클래스의 객체를 참조하기 위한 참조변수를 선언, 메모리에 참조변수 t1을 위한 공간이 만들어짐

 

               // 클래스의 객체를 생성후 객체의 주소를 참조변수 t1 에 대입, tv클래스의 인스턴스가 메모리의 빈공간에 생성되고

               // 대입연산자(=)에 의해서 생성된 객체의 주소값(0x100)이 참조변수 t1에 저장된다.

t1 = new tv(); 

t1.channel = 11; // tv인스턴스의 멤버변수 channel의 값을 7로 한다.

t1.channeldown(); // tv인스턴스의 메소드 channeldown()을 호출한다.

System.out.println("현재 채널은 " + t1.channel + " 입니다.");

}

}

 

메소드

0. 메소드는 소문자로 시작한다. (ex : deleteJob, selectMember, getData, setData, isData, isFlag, do_Patch)

(ex : getTotal, getAverage)

displayCaption, printMoney = system.out.print 메소드로 출력하는 리턴값

카멜표기법

두 단어 이상의 변수명이 들어왔을때 두번째 단어부터 첫글자를 대문자로 표기하는 방법

1. 객체의 행위를 표현하기 위한것, 객체의 행위

2. ()소괄호가 있으면 메소드 또는 멤버메소드라고 부른다.

ex : public void print() { System.out.println("안녕하세요."); } -> print 멤버메소드를 정의(구현)했다.

ex : public void print(); -> interface print 추상메소드를 선언했다.

ex : Hello.print(); -> Hello 클래스의 print 메소드를 호출했다.

ex : System.out.println("안녕하세요."); <- system 클래스의 out 멤버변수에 println 멤버메소드를 호출했다.

 

그림입니다.

원본 그림의 이름: mem000018d45e00.tmp

원본 그림의 크기: 가로 550pixel, 세로 166pixel

슈퍼클래스(부모클래스)

상속관계에서 상속할 클래스

 

서브클래스(자식클래스)

상속관계에서 상속받을 클래스

 

인터페이스

1. 인터페이스는 상수와 추상메소드(메소드 선언부)로 이루어져 있다.

2. 인터페이스는 다중상속을 지원한다.

3. 인터페이스 식별자는 대문자로 시작하고 각 단어마다 첫 글자는 대문자로 구분함

4. 프로젝트에서는 설계자가 인터페이스를 만들고 개발자가 인터페이스를 인플리먼트 하여 클래스로 만든다.

 

식별자

1. 클래스, 인터페이스, 변수, 메소드, 배열문자열 등을 구분할수 있는 이름 (: int count; 에서 식별자는 count)

ex : a = b + c; (a,b,c는 식별자 =+는 연산자 ;는 구분자)

 

리터럴

변수에 값을 대입하기 위한 값(: 2, 1.1111, 'a', "aaaaaaaaaaa")

리터럴의 종류는 실수형 리터럴(2.11), 정수형 리터럴(11), 문자형 리터럴('a'), 문자열형("aaaaa") 리터럴 등이 있습니다.

 

그림입니다.

원본 그림의 이름: mem000018d40001.PNG

원본 그림의 크기: 가로 267pixel, 세로 99pixel

 

int cup; <- 변수 선언

 

cup = 10; <- 변수 대입

 

데이타형 (데이타타입)

 

숫자, 문자, 문자열과 같은 데이터를 담기 위해 선언하는 데이터 구분자

변수 또는 상수가 차지하는 메모리의 양(type)과 종류를 의미한다.

자바의 자료형은 크게 기본 자료형과 객체형으로 나눌 수 있다.

 

자바에서는 무조건 데이타타입이 존재한다.

 

그림입니다.

원본 그림의 이름: mem000018d40002.PNG

원본 그림의 크기: 가로 552pixel, 세로 262pixel

 

그림입니다.

원본 그림의 이름: mem000018d40003.PNG

원본 그림의 크기: 가로 613pixel, 세로 499pixel

 

예를 들어 숫자 중에서도 정수형을 담기 위해 선언하는 데이터형에는 int형이 있고 문자열에는 String 형이 있습니다.

대표적인 이 두 데이터형은 서로 다른 이름으로 불립니다.

먼저 int형은 기본 데이터형이라 불리며 String 형은 참조형이라 불립니다.

 

1.기본 데이터형(primitive Data Type) - 실제값을 저장한다.

 

기본 데이터형은 정수형, 실수형, 문자형, 논리형과 같은 데이터를 담기 위한 데이터형입니다.

 

2.참조형(Reference Data Type) - 어떤값이 저장되어 있는 주소를 값으로 갖는다. 객체의 주소(4바이트)

값으로 갖는다.

 

참조형은 어떤 특정 영역을 참조한다는 것을 말합니다. 여기서 말하는 특정 영역은 자바 가상 머신에 있는 힙 영역이라 불리는 메모리 영역입니다. 참조형의 대표적 데이터형은 배열, 클래스, 인터페이스 등이 있습니다.

 

그림입니다.

원본 그림의 이름: mem000018d40004.tmp

원본 그림의 크기: 가로 548pixel, 세로 265pixel

 

 

예외(Exception)

 

프로그램이 정상적으로 실행되는데 방해가 되는 에러들

 

예외처리

 

1. 처리 가능한 오류, 발생한 오류에 대해서 대처방법을 제시하는것

2. 에러가 발생해도 프로그램이 비정상적으로 종료되지 않고 계속 실행되게 처리하는것

ex : 자바의 모든 예외 관련 클래스는 java.lang.Throwable 클래스의 하위 클래스에 정의되어 있습니다.

ex : java.lang 패키지는 모든 프로그램에서 자동적으로 import되며 모든 자바 프로그램의 기초가 되는 클래스와 인터페이스를

포함하고 있다. java.lang 패키지에서 가장 많이 사용되는 Object 클래스에 대해 알아보자.

Object 클래스는 모든 자바 클래스의 최상위 클래스이다. 즉 모든 클래스는 자바의 최상위 클래스인 java.lang.Object

클래스로부터 상속을 받도록 설계되어 있다.

 

객체

 

인스턴스와 비슷한 뜻으로 쓰이며 클래스를 통해 실체화 된것

객체를 통해서 인스턴스 변수와 인스턴스 메소드에 접근할수 있다.

class Test {

int a; // 인스턴스 변수

void print1() { //인스턴스 메소드 }

}

 

static 변수 (정적 변수=클래스 변수)

어디에서 선언이 되더라도 공유가 가능하다.

static이 선언되는 순간에 하나의 메모리공간이 할당되어 그 순간부터 공유가 가능하다.

static 변수는 다른 클래스파일안에 존재하는 변수라 할지라도 별도의 클래스객체 생성없이 호출이 가능하다.

이클립스 내에서는 이탤릭체로 표현된다. 살짝 우측으로 기운 글씨체

예제 : static int initNum;

인스턴스 변수(non static 변수)는 인스턴스가 생성될때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할수 있지만

클래스 변수(static 변수)는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.

지역변수는 선언된 블럭이 종료되면 소멸되고 힙영역에는 인스턴스변수가 생성되는 영역이며 자역변수는 호출스택에 생성된다.

보통 인스턴스 메소드는 인스턴스 변수와 관련된 작업을 하고 static메소드는 static 변수와 관련된 작업을 한다.

정적 멤버변수 : 클래스가 메모리에 로드될때 생성된다.

 

static 메소드 (정적 메소드=클래스 메소드)

객체를 생성하지 않아도 바로 호출할수 있는 메소드

메소드 앞에 static이 붙어 있으면 클래스 메소드(static 변수)이고 붙어 있지 않으면 인스턴스 메소드이다.

 

인스턴스

1. 클래스를 메모리에 할당받아 실체화 된 객체

2. 특정 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

 

대괄호 [], 중괄호 {}, 소괄호 ()

 

자바 콘솔 프로그램

 

콘솔은 윈도우에서 말하면 도스모드을 말하며 유닉스, 리눅스에서는 쉘모드를 말합니다.

자바 콘솔 프로그램은 도스모드(윈도우)와 쉘모드(유닉스, 리눅스에서 실행되는 자바

프로그램입니다.

자바 GUI 프로그램은 윈도우모드나 X윈도우모드 에서 실행되는 자바 프로그램입니다.

 

패키지 (Package)

여러가지 기능을 가진 클래스를 전문가들이 만들어 놓은것

import sun.util.char;

상단설명 : sun폴더의 util폴더안에 char클래스를 사용하겠다.

import sun.*;

 

상단설명 : sun폴더안에 들어있는 util폴더를 포함한 모든 클래스를 사용하겠다.

사용하는 이유 : 자바는 소스코드를 컴파일하면 클래스마다 하나의 바이크 코드가 생성된다. 소스가 복잡해지면 하나의 

디렉토리에서 관리하기 힘들고 파일이름이 중복될수도 있다. 이런 문제를 해결하기 위해 관련된 내용끼리 따로 디렉토리를

만들고 저장해놓는 기법을 사용하는데 이렇게 만들어진 것을 패키지라고 한다.

패키지는 하부 패키지와 클래스로 구성되어 있습니다. 하부 패키지는 클래스들을 포함하고 있고 계층적 구조로 되어 있습니다.

java.lang.Stringjava 패키지의 하부패키지인 lang 아래에 String 클래스가 있다는 의미입니다. 결국 java는 최상위 패키지

입니다. 자바는 패키지를 저장하기 위해  디렉토리 구조를 사용합니다. 최상위 패키지가 최상위 디렉토리가 되고 하부

패키지는 하부 디렉토리가 됩니다. java 디렉토리 밑에 lang 디렉토리, 그 아래에 String 클래스가 위치하니다.

 

추상 클래스

 

구현 클래스

 

종단 (Final) 클래스

 

더이상 상속할수 없는 클래스를 말하며 내시 클래스 라고도 부른다.

 

이너 (Inner) 클래스

 

클래스안에 클래스를 선언한것

 

자바FX 스크립트

 

웹이나 애플리케이션을 개발할 때 멀티미디어를 더 쉽고 풍부하게 구현할 수 있도록 해주는

기술

 

MVC 패턴

 

Model - View - Control

M(dao) - V(jsp) - C(servlet)

 

리포지토리(Repository)

소스 저장소라고 하며 모든 프로젝트의 프로그램 소스들은 이 저장소 안에 저장이 됩니다.

대표적인 리포지토리 사이트로 code.google.com / github.com / sourceforge.net 가 있습니다.

 

프로세스, 쓰레드

프로세스는 특정한 작업을 처리하기 위해 메모리에 적재된 프로그램이고 스레드는 명령흐름이다.

즉 명령어가 실행되는 순서의 흐름이다. 함마디로 스레드는 프로세스 내부에서 독립적인 작업을 처리하는 명령어의 집합이다.

프로세스 안에서 여러개의 명령어가 독립적으로 수행되는 경우가 다중스레드라 부른다. 스레드를 사용하지 않는 프로그램은

단일스레드라고 부른다.

 

서블릿 (Servlet) 

Server+Applet : 확장 CGI 방식 = CGI 방식은 모든 요청에 대해서 매번 프로세스를 생성하는 방식인데 확장 CGI

동일한 프로그램에 대해서는 하나의 프로세스를 생성한후 여러개의 스레드로서 요청을 처리하는 방식이기 때문에

시스템에 부하를 줄일수 있다.

자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램, 자바코드안에 HTML태그가 혼재되어 있어 

작업에 대한 분리적인 측면에서 볼때 효율성이 떨어진다.

 

JSP (Java Server Page)

동작 페이지를 생성하기 위해 사용하는 서버측 스크립트 언어

* 서버 사이드 스크립트 : 서버측에서 실행되는 스크립트언어

 

메타데이터 (Meta Data)

데이터(data)를 위한 데이터이다. 어떤 데이터 즉 구조화된 정보를 분석, 분류하고 부가적 정보를 추가하기 위해 그 데이터 

뒤에 함께 따라가는 정보를 말한다. 이를테면, 디지털 카메라에서는 사진을 찍어 기록할 때마다 카메라 자체의 정보와 촬영

당시의 시간, 노출플래시 사용 여부, 해상도, 사진 크기 등의 사진 정보를 화상데이터(이미지)와 같이 저장하게 되어 있다.

: jFlow 1.0 에서 정기작업 신청시 의뢰사유 항목이 메타성 데이터에 해당된다.

 

변수

변하는 데이타를 저장하는 이름

헝가리안 표기법

헝가리안 표기법은 실제 변수의 데이터 타입을 소문자로 한글자로 

표기하고 두번째 단어는 대문자로 시작하는 표기법이다.

 

상수

변하지 않는 데이타를 저장하는 이름

종단변수 : final 키워드를 사용해서 변수를 상수로 만든다. 종단변수는 관례상 대문자를 사용한다.

private final String JDBC_URL = "jdbc:oracle:thin:@호스트주소:포트번호:SID";

 

스레드(Thread)

프로세스 안에서 실행되는 작은 프로그램

프로세스 안에서 순차적으로 작동하는 명령어의 집합, 순차적으로 실행되는 명령어들은 하나의 실로 꿸수 있기 때문에

스레드(Thread:)라고 부릅니다.

멀티스레드는 여러개의 스레드가 동시에 실행된다고 하였지만 이것은 일반적인 설명이고 실제로는 그렇지 않습니다.

그 이유는 대부분의 컴퓨터는 한개의 cpu만 가지고 있기 때문에 실제로 여러 스레드 중에 하나의 스레드만을 수행합니다.

스레드가 작동하는 방식은 하나의 스레드가 종료할때까지 cpu를 독점하는 것이 아니고 여러개의 스레드를

번갈아 가면서 처리합니다. 이처럼 여러개의 스레드를 교차하면서 처리하는 것을 스케줄링 이라고 합니다.

스레드 사용예제

class Thread2 extends Thread {

public Thread2(String name) {

super(name);

}

public void run() {

try {

for(int a=0; a<5; a++) {

Thread.sleep(1000);

System.out.println(this.getName() + " : a = "+a); 

}

}

catch(InterruptedException e) {

System.out.println(e.getMessage());

}

}

}

 

class HelloJava {

public static void main(String[] args) {

Thread2 t2 = new Thread2("1번 쓰레드");

Thread2 t3 = new Thread2("2번 쓰레드");

 

t2.start();

t3.start();

}

}

 

[자바용어] DAO(Data Access Object)

Data Access Object의 약자로 Data에 접속하는 객체입니다.

여기서 Data란 일반적인 DataBase가 될수도 있고 파일이 될수도 있으며 메모리가 될수도 있고 기타 다른 저장소도 될수 있습니다.

그래서 DAO는 어떠한 저장소에 데이터를 입력하거나 조회하거나 수정/삭제하는 처리를 담당하게 부분을 말합니다.

DAODB에서 뭔가를 꺼내오기 위한 클래스를 말한다.

 

[자바용어] DTO(Data Transfer Object)

데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체

DAO는 데이터베이스에 접근하여 직접 데이터를 꺼내는 행위를 하는데 비해 DTO는 데이터를 꺼내거나 담을 뿐 다른

행위는 하지 않는다는 것이다.

보통 빈클래스를 말한다. 아래소스가 포함된 클래스를 말한다. 반드시 Setter 메소드와 getter 메소드가 존재한다.

public String getId() {

    return id;

}

public void setId(String id) {

    this.id = id;

}

VODTOBean파일은 같은 의미로 사용된다.

[자바용어] VO(Value Object)

Value Object의 약자로 말그대로 데이터의 값(Value) 그 자체를 의미합니다.

프로그램의 사용자가 화면에서 어떤데이터를 입력하거나 조회 요청 왔을때 입력된 데이터나 조회하는 조건들을 VO에 담아서

DAO에 요청하면 DAO는 저장소(일반적으로는 DataBase을 말한다.)로부터 데이터를 입력하거나 조회한 후 그 결과를 돌려 주게 됩니다.

VO는 우리가 타고다니는 교통수단처럼 데이터를 이동시키는 역할을 한다.

 

폴링(Polling)기법

한프로그램이나 장치에서 다른 프로그램이나 장치들이 어떤 상태에 있는지를 지속적으로 체크하는 전송제어 방식으로

대체로 그들이 아직도 접속되어 있는지와 데이터 전송을 원하는지 등을 확인한다.

쉽게 말해서 Status Bar, Dash Board(대시보드), 처리유무확인(처리결과 받음) 등에 쓰이는 실시간처리 방식이다.

A 프로세스에서 폴링기법으로 처리명령을 내리면 B 프로세스에서 처리에 따른 데이타를 받고 그에 따른 처리결과를 B프로그램

로 전송해준다.

(아래는 전자계산기조직으용기사 공부하다 발췌)

하나의 장치가 충돌 회피 또는 동기화 처리등을 목적으로 다른 장치의 상태를 주기적으로 검사하여 일정한 조건을 만족할때

송수신 등의 자료처리를 하는 방식

 

deprecated (디프리케이티드)

중요도가 떨어져 더 이상 사용되지 않고 앞으로는 사라지게 될

ex : date 클래스를 보면 디프리케이티드 되어 있다. 그래서 캘린더 클래스를 사용하기를 권장한다.

 

메이븐 (Maven)

jar파일을 효율적으로 관리하는 라이브러리 관리 툴이자 빌드 툴이다.

예전에는 Ant를 많이 썼는데 요즘은 그 자리를 메이븐이 차지하고 있다.

 

풀링(Pooling) 기법

보통 DB연결을 연결하고 종료하지 않고 미리 DB연결 객체를 만들어놓고 공유해서 사용하는 기술이다.

이렇게 연결하게 되면 DB연결을 매번 연결하고 종료하지 않기 때문에 좀더 빠른 처리속도를 느낄수 있고

서버에도 부하를 적게 준다.

 

자바 배열

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 말한다.

int[] score1 = new int[2]; // 기본형 배열의 선언 및 생성

score1[0] = 100; // 기본형 배열 초기화

score1[1] = 200; // 기본형 배열 초기화

 

// 배열을 선언하면서 생성하고 초기화를 시킨다.

// 초기화 시켜줄때는 생성하는 괄호[]에는 배열의크기를 줄수 없다.

int[] arr = new int[]{1,2,3,4,5};

 

// 1차원 기본형 배열의 선언 및 생성 및 초기화 방법1

int[] score2 = {10,120,30}; // 기본형 배열의 선언 및 생성 및 초기화 방법1

int[] score3 = new int[] {100,200,300}; // 기본형 배열의 선언 및 생성 및 초기화 방법2

 

// 2차원 기본형 배열의 선언 및 생성 및 초기화

int[][] score = { { 100, 100, 100 }, { 20, 20, 20 }, { 30, 30, 30 }, { 40, 40, 40 }, { 50, 50, 50 } };

 

 크기는 따로 지정해주지 않으면 주어진 값의 개수에 따라 자동적으로 크기가 결정된다.

배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화 되므로 배열을 사용하기전에 초기화를

해주지 않아도 된다. ex : int -> 0, boolean -> false, long -> 0L, float -> 0.0f, 참조형 변수 -> null

// 참조형 배열 선언 및 생성 및 초기화 방법1

String[] name1 = {"leejunsik","lssjee","1112233"}; 

// 참조형 배열 선언 및 생성 및 초기화 방법2

String[] name2 = {new String("kim"), new String("park"), new String("jun")};

 // 참조형 배열 선언 및 생성 및 초기화 방법3

String[] name3 = new String[] {new String("kim"), new String("park"), new String("jun")};

배열변수는 참조변수이다.

int array1[10]; // 잘못된 배열 선언 및 생성 

'프로그래밍 개론' 카테고리의 다른 글

자카르타 프로젝트  (0) 2015.10.16
리버스 엔지니어링  (0) 2015.10.11
이클립스 종류  (0) 2015.10.10
서블릿(Sevlet)  (0) 2015.10.10
바인딩  (0) 2015.10.10
블로그 이미지

532

처음 프로그래밍을 시작한 개발자들은 Hello World!를 기억 할 것이다. Hello world가 Hell World가 될 줄 몰랐던 한 개발자의 이야기. 게시글의 출처를 표기하며, 출처를 남기지 않고 펌을 하는것에 대해 법적 책임을 묻지 않습니다.

,