앱 어플리케이션을 구분하는 역할을 함

 

 

1. com.회사이름.프로젝트이름

 

2. com.회사이름.플랫폼.프로젝트이름

 

3. kr.co.회사이름.프로그램이름

 

4. kr.co.회사이름.플랫폼.프로젝트이름

 

 

회사 이름이나 혹은 도메인(url) 등은 유니크하기 때문에 사이트명으로 많이 구분함

웹사이트 주소를 반대로 기재한 모양으로 패키지 이름을 부여함

명칭 소문자 사용

패키지명에 대문자는 사용하지 않는게 좋음

소스 파일들을 각각의 그룹으로 구분하기 위해 점으로 구분

패키지 이름에 따라 소스가 들어가는 폴더가 자동으로 만들어짐

'BackEnd > Java' 카테고리의 다른 글

Jsp :: jsp 내장객체  (0) 2016.06.03
Java :: JDBC DAO 소스  (0) 2016.04.26
Servlet :: Servlet(서블릿) 이란?  (0) 2016.04.01
Java :: 다형성  (1) 2016.03.23
Java :: this  (0) 2016.03.21

1. 정의

javax.servlet / javax.servlet.http 패키지


네트워크 프로토콜과 무관하게 설계되었지만, 대부분 HTTP 프로토콜을 사용하는 웹 환경에서 동적인 컨텐츠를 만들 때 사용하는 기술

jsp는 서블릿 기술을 기반으로 탄생했고 복잡한 html 디자인으로 구성된 동적인 페이지를 만드는데 서블릿보다 좋은 생산성을 가짐


* javax.servlet.Serlvet 인터페이스 : 모든 서블릿이 구현해야 함

  javax.servlet.GenericServlet 추상클래스 : 대부분의 서블릿이 상속 받아야 함

  javax.servlet.http.HttpServlet 클래스 : http 프로토콜을 사용하는 서블릿이 상속 받아야 함


* GenericServlet은 개발자가 사용하기 편하도록 javax.servlet.ServletConfig 인터페이스로 구현하였음

 

 

2. 구성

ㄱ. Servlet 인터페이스

모든 서블릿은 Servlet 인터페이스를 구현해야 함

서블릿의 라이프사이클 메소드가 선언되어 있음

- init() : ServletConfig 인터페이스 객체를 인자로 전달 받는데, DD에 초기화 파라미터가 존재할 경

우 init(ServletConfig config) ~ 가 됨

- service()

- destroy()

ㄴ. GenericServlet 추상클래스

부모 클래스로 쓰이고 ServletConfig 인터페이스를 구현함

Servlet 인터페이스를 불완전하게 구현하기 때문에 service() 메소드는 Abstract로 선언해야 하고 GenericServlet은

추상 클래스가 됨

(ex. public abstract void service(       ,     ) ~ )

인자가 없는 init() 메소드는 편의상 추가되었음

=> init(ServletConfig config)의 경우 자식 클래스에서 오버라이딩응ㄹ 하려면 첫번째 줄에 super(config); 코드

넣어야 함

ㄷ. HttpServlet 클래스

요청 : HttpServletRequest / 응답 : HttpServletResponse



3. 동작 과정

ㄱ. 사용자의 url 요청

url 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹서버 측에 url과 서블릿 클래스를 미리 매핑시켜 놓은 배포 서술자가 필요

(배포 서술자 : web.xml => 웹서버가 알아챌 수 있도록 적어놓은 파일)

ㄴ. request, response 객체 생성

웹 컨테이너는 지금 받은 요청을 처리하기 위해 HTTP 요청(request)을 처리하기 위한 request 객체와 HTTP 응답을 위한 response 객체를 생성

ㄷ. 서블릿 인스턴스와 스레드 생성

request, response 객체 생성 뒤 사용자의 url 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자를 통해 알아냄

- 한 번도 실행된 적 없는 경우 : 새로 인스턴스를 생성(메모리에 로드함)

init() 메소드를 실행하여 초기화한 뒤 스레드를 하나 생성함

- 이미 인스턴스가 존재할 경우 : 기존의 인스턴스에 스레드만 하나 새로 생성

 

* 각 서블릿 인스턴스는 웹컨테이너당 하나씩만 존재하므로 init() 메소드는 각 서블릿당 한 번씩만 호출됨

 

ㄹ. service() 메소드 호출, 서블릿 클래스 작성

스레드가 생성되면 각 스레드에서 Service() 메소드 호출

- get방식 : doGet() 메소드가 response.request 객체를 인자로 호출

- post방식 : doPost() 메소드가 response.request 객체를 인자로 호출

ㅁ. 응답과 스레드의 소멸

doGet, doPost 메소드가 호출되어 사용자 요청에 따른 동적 웹페이지를 생성하면 그 결과물이 담긴 request 객체를

웹컨테이너가 HTTP response 형태로 바꿔 웹서버로 전송

사용이 끝난 request, response 객체를 소멸시키고 스레드 종료

 

* 클라이언트가 url 요청

  => 웹서버 : 요청된 서블릿 확인 후 컨테이너로 요청

  => 컨테이너 : request, response 생성 후 web.xml참조하여 해당 서블릿의 스레드 생성 후 service 메소드 호출

  => sevice() 메소드에서 요청 방식에 따라 doGet, doPost 메소드 호출

  => doGet, doPost 메소드에서 응답 생성

'BackEnd > Java' 카테고리의 다른 글

Java :: JDBC DAO 소스  (0) 2016.04.26
Java :: 패키지 이름 명명 규칙  (0) 2016.04.02
Java :: 다형성  (1) 2016.03.23
Java :: this  (0) 2016.03.21
Java :: 상속(Inheritance)  (0) 2016.03.20

1. 정의

하나로 여러가지 일을 하는 것

 

* 상속과 함께 사용되는 다형성의 기법들

- 오버라이딩 (Overriding)

- 추상 클래스(Abstract Class) 와 추상 메소드(Abstaract Method)

- 인터페이스 (Interface)

- 업캐스팅(Upcasting), 다운캐스팅(Downcasting)

 

 

2. Abstract

추상 메소드 : 미완성 클래스. 몸체가 없는 메소드를 포함하고 있음. 몸체가 없는 메소드의 선언부에 abstract 키워드를 사용해야 함

추상 클래스 : 추상 메소드를 포함하는 클래스

 

 

 

미완성 메소드를 포함하고 있기 때문에 클래스 자체가 미완성

 

ㄱ. 단점

- 완전한 클래스가 아니기 때문에 추상 클래스를 이용하여 객체 생성 불가

- 완전한 클래스로 만들기 위해서는 상속의 기법을 이용하여 추상 메소드를 구현해야 함

=> 추상 클래스를 상속받아 모든 추상 메소드를 구현 (상속을 통해 추상 메소드를 전부 구현해야만 객체 생성 가능)

=> 추상 메소드를 모두 구현하지 않으면 다시 abstract 클래스가 됨

 

 

<추상 클래스인 Example044를 상속하여 추상 메소드를 구현함>

 

 

<메인 메소드에서 상속된 클래스의 객체를 불러옴>

 

 

 

3. 인터페이스 (Interface)

골격만 가지고 있는 클래스. 몸체 없는 메소드(추상 클래스)의 집합 (구현된 메소드가 아예 들어가지 못함)

 

* 추상 클래스 : 일부분이 추상 메소드, extends 이용하여 추상 메소드 구현

  인터페이스 : 전체가 구현되지 않은 추장 메소드로 이루어진 클래스, implements 이용하여 추상 메소드 구현

 

인터페이스 내의 모든 메소드들은 구현을 목적으로 하기 때문에 디폴드로 public 속성을 가지고 있다

(일반 클래스는 디폴트가 private이다)

 

추상 메소드로 이루어져 있지만 멤버 변수로 static 상수는 포함시킬 수 있다 => static 전역 상수 변수가 됨

 

 

 

 

4. 업캐스팅 (Upcasting)

하위 클래스의 객체가 상위 클래스의 형으로 캐스팅되는 것

별도의 작업 없이 형만 정확하다면 자동으로 캐스팅됨

추상클래스, 인터페이스의 업캐스팅도 같음

다형성의 극대화

 

* 업캐스팅과 연결되는 기술들 : 상속, 오버라이딩, 가상 메소드, 추상 클래스, 인터페이스

 

 

 

 

* 캐스팅 (Casting)

기본 데이터 타입 : 큰 데이터 타입의 데이터를 작은 데이터 타입에 할당시 데이터의 손실 발생

클래스 : 하위 클래스의 객체를 사우이 클래스 형의 객체로 캐스팅하는 것이 가능

 

 

 

 

'BackEnd > Java' 카테고리의 다른 글

Java :: 패키지 이름 명명 규칙  (0) 2016.04.02
Servlet :: Servlet(서블릿) 이란?  (0) 2016.04.01
Java :: this  (0) 2016.03.21
Java :: 상속(Inheritance)  (0) 2016.03.20
Java :: 생성자(Constructor)  (0) 2016.03.18

1. 정의

자기 자신을 참조하는 가상의 참조 변수

클래스 내에서 메소드를 만들면 자동으로 추가되는 매개변수

 

 

2. 특징

멤버 메소드에 추가되는 가상의 매개변수이기 때문에 멤버 메소드 내에서만 사용 가능

 

 

3. 종류

this.멤버필드, this.멤버메소드 : 메소드의 매개변수와 클래스의 멤버 필드가 동일하기 때문에 구분해줘야 할 때 사용(반드시 사용해야 함)

필요 없다면 this 키워드를 사용하지 않아도 상관 없음

this : 자신의 참조값 자체. 클래스 내부에서 this를 사용하게 되면 객체 생생된 후 할당된 메모리의 참조값을 갖게 됨

언젠가 생성될 내 메모리의 참조값

this() : 사용자가 제한적으로 생성자를 직접 호출할 수 있게 해주는 것

객체 생성시 딱 한 번만 호출됨

생성자에서 다른 생성자 호출시 생성자 호출은 제일 윗부분에 사용해야 함

 

 

* this 이용하여 생성자 호출시의 규칙

- 반드시 생성자 내에서 다른 생성자를 호출해야 함

- 생성자에서 this를 이용한 생성자 호출은 어떠한 작업보다도 먼저 선행되어야 함

- this를 이용한 생성자 호출 앞에는 어떠한 구문도 사용 불가

 

'BackEnd > Java' 카테고리의 다른 글

Servlet :: Servlet(서블릿) 이란?  (0) 2016.04.01
Java :: 다형성  (1) 2016.03.23
Java :: 상속(Inheritance)  (0) 2016.03.20
Java :: 생성자(Constructor)  (0) 2016.03.18
Java :: 메소드 오버로딩 vs 오버라이딩  (0) 2016.03.18

1. 정의

미리 만들어 둔 클래스를 다시 이용하는 방법(클래스에서만 통용되는 기법)

클래스의 특정 부분을 공통적으로 사용하되, 약간의 다른 부분들을 재정의하기 위해 반복하여 정의할 필요 없이 클래스들을 계층 구조로 만들어 사용

모든 클래스는 super 클래스를 가지게 되는데 특별히 지정하지 않아도 자동으로는 java.lang.Object 클래스를 디폴트로 상속받음

하위 클래스가 상위 클래스를 상속받았을 때, 하위 클래스는 상위 클래스의 모든 권한을 갖게 되는 것

하나의 클래스에서는 하나의 슈퍼클래스만 상속 가능

 

자바는 만들어진클래스를 이용하여 새로운 클래스로 확장할 때 extend라는 키워드를 사용함

 

상속을 받는 순간 현재의 클래스는 곧 상위 클래스에서 출발함

 

* 생성자는 상속되지 않고 단지 자식 클래스에 의해 자동으로 호출된다

  상속 과정에서 상위 클래스의 메모리가 생성되지 않는다면, 자식 레벨의 메모리도 생성되지 않는다

 

 

 

 

 

 

 

'BackEnd > Java' 카테고리의 다른 글

Java :: 다형성  (1) 2016.03.23
Java :: this  (0) 2016.03.21
Java :: 생성자(Constructor)  (0) 2016.03.18
Java :: 메소드 오버로딩 vs 오버라이딩  (0) 2016.03.18
Java :: 자바의 기본  (0) 2016.03.18

1. 정의

객체 생성과 동시에 자동으로 호출되는 메소드

메모리 생성 후 자동 호출된다는 점을 이용하여 멤버 변수의 초기화 작업이나 메모리 생성과 동시에 해줘야 하는 작업들을 프로그램하게 됨

 

생성자를 따로 만들지 않는다면 컴파일러가 자동으로 매개변수가 없는, 아무 일도 하지 않는 디폴트 생성자를 만들어줌

 

기본적으로 모든 클래스는 반드시 하나의 생성자를 포함해야 하기 때문에 생성자가 없을 경우에만 클래스와 같은 이름의 생성자를 만들어줌

 

* 디폴트 생성자(Default Constructor)

생성자가 없는 클래스를 위해 컴파일러가 만들어주는 매개변수를 가지지 않는 생성자

 

 

2. 특징

유일하게 리턴 타입이 없는 메소드

생성자의 이름은 클래스의 이름과 동일함

객체의 메모리가 생성된 직후에 호출됨

마음대로 호출이 불가능

 

대부분 new와 함께 상요되며 예적으로 생성자를 호출할 수 있는 경우는 this와 super를 이용하는 경우 뿐

 

디폴트 생성자가 맘에 들지 않으면 매개변수가 있는 새로운 생성자를 사용자가 직접 만들어도 됨

 

 

 

 

<디폴트 생성자 Example031()을 이용하여 name, address, age 값을 초기화한 예>

'BackEnd > Java' 카테고리의 다른 글

Java :: this  (0) 2016.03.21
Java :: 상속(Inheritance)  (0) 2016.03.20
Java :: 메소드 오버로딩 vs 오버라이딩  (0) 2016.03.18
Java :: 자바의 기본  (0) 2016.03.18
Java :: 클래스  (0) 2016.03.16

1. 오버로딩 (Overloading)

같은 이름의 메소드를 여러개 가지며 매개변수의 유형, 갯수가 다르도록 하는 것

호출되는 매개변수의 갯수나 유형에 따라 매칭되어 함수를 실행함(리턴 타입의 유무는 영향을 미치지 않음)

static 예약어도 오버로딩이 가능함(오버로딩 하는 방식은 똑같음)

기능이 유사하거나 비슷한 경우에 메소드 이름을 같게 하여 나오는 결과만 다르게끔 할 때 사용함

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package kr.or.ksmart.A;
 
public class OverloadingTest {
    public void test() {
        System.out.println("매개변수 없음");
    }
    
    public void test(int a, int b) {
        System.out.println("매개변수 " + a + "와 " + b);
    }
    
    public void test(double d) {
        System.out.println("매개변수 " + d);
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
package kr.or.ksmart.A;
 
public class OverloadingTest_Main {
    public static void main(String[] args) {
        OverloadingTest ot = new OverloadingTest();
        
        ot.test();
        ot.test(10);
        ot.test(1020);
    }
}
cs

 

 

OverlodingTest 클래스에서 test라는 중복되는 이름을 가진 메소드가 3개이지만, 매개변수 갯수, 인자가 다르기 때문에 main메소드에서 호출시 각각 다른 값을 리턴한다.

 

 

2. 오버라이딩 (Overriding)

부모 클래스가 가지고 있는 변수, 메소드를 자식 클래스에서 재정의하는 것 (함수의 원형은 부모 클래스와 일치해야 함)

이미 사용중인 클래스의 멤버 함수를 수정하는 경우 그 클래스를 건드리지 않고 update, upgrade 할 경우에만 사용

부모 클래스의 메소드를 호출시 super 키워드를 사용함

 

1
2
3
4
5
6
7
8
9
10
11
12
package kr.or.example.A;
 
public class Animal {
    String name;
    int age;
    
    public void printPet() {
        System.out.println("console> printPet() is called ...");
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package kr.or.example.A;
 
// Animal 클래스를 상속받은 Cat 클래스
public class Cat extends Animal {
    String variety;
    
    public void printPet() {
//      super 키워드를 이용하여 부모 클래스인 Animal 클래스의 동명 메소드 printPet() 호출
        super.printPet();
        
        System.out.println("console> printPet() extends is called ...");
        System.out.println("종류 : " + variety);
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
package kr.or.example.A;
 
public class Animal_Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        
        cat.name = "양순이";
        cat.age = 5;
        cat.variety = "페르시안";
//      variety() 메소드는 extends class 안에 있는 지역변수이므로 나중에 출력됨
        cat.printPet();
    }
}
cs

 

 

 

'BackEnd > Java' 카테고리의 다른 글

Java :: 상속(Inheritance)  (0) 2016.03.20
Java :: 생성자(Constructor)  (0) 2016.03.18
Java :: 자바의 기본  (0) 2016.03.18
Java :: 클래스  (0) 2016.03.16
Java :: 클래스 - 도입  (0) 2016.03.15

1. 클래스의 형태

ㄱ. simple class

ㄴ. 디렉터리 형태의 라이브러리 (패키지를 만드는 것)

ㄷ. jar 형태

 

* 라이브러리를 만들 때에는 먼저 이클립스 내에서 import를 하고 -d 옵션을 이용하여 컴파일

 ( javac    -d    파일명.java)

- d : 컴파일한 결과 클래스 파일이 만들어지는 디렉토리를 현재 디렉토리로 설정하는 옵션

 

* 디렉토리 형태의 패키지 (패키지를 통쨰로 라이브러리로 묶음)

 

 

2. jar

자바 전용 zip 압축 파일

패키지를 배포할 때 사용하는 방법

(cmd : jar.exe    -cf     파일명.jar    /패키지이름)

- 패키지에 들어있는 모든 파일들을 파일명.jar로 묶는다는 의미

(cmd : java    -jar    파일명.jar)

- jar파일 실행

- manifest 속성 : 프로젝트 내에 Manifest.txt 파일을 만들고 내용을 Main-class : com.~(경로)로 적고 반드시 엔터를 두 번 쳐야 함

(cmd : jar    cfm    파일명.jar    Manifest.txt    클래스명.class)

- minifest 파일 실행

(이클립스 : export > java > runnable jar file)

 

 

3. main() 메소드

ㄱ. 자바 가상머신에 의해 호출되는 메소드

ㄴ. main() 메소드가 포함된 클래스를 실행 클래스라고 함

ㄷ. java.exe를 이용하여 메소드 호출

 

 

4. static

객체를 아무리 많이 만들어도 static 변수는 오직 하나의 메모리만 생성

static 멤버 변소의 메모리는 하나만 생성된 후, 공유를 하기 때문에 변수의 값이 모든 객체에서 동일하게 출력되는 것

클래스 설계시 멤버변수 중 모든 인스턴스에 공통적으로 사용해야 하는 것에 static을 붙임

인스턴스를 생성하면 각 인스턴스들은 서로 독립적이기 때뭉네 서로 다른 값을 유지함

경우에 따라 인스턴스들이 공통적으로 같은 값이 유지되어야 하는 경우 static을 붙임

static이 붙은 멤버변수는 클래스가 메모리에 올라갈 때 자동 생성되기 때문에 인스턴스를 생성하지 않아도 생성 가능

static 메모리는 클래스의 이름만 언급되어도 자동 생성 (객체 생성 하기 전에 클래스 이름으로 static 멤버에 접근 가능)

 

* static 멤버 메소드 내에서 일반 멤버변수 사용 불가 => 에러

 

static 멤버변수만 사용 가능

 

5. byte code

중간 단계의 언어

기계어로 변환하기 좋은 반 기계어

 

* 가상머신(자바 운영체제) : 바이트 코드를 동작시키기 위해 해석하고 실행하는 시스템

 

 

6. process

프로그램이 로딩되어 실행 가능 상태가 되었을 때의 메모리

ㄱ. 구성

- 상수 메모리 영역 : 프로그램에서 모아두는 메모리 공간

- 코드 메모리 영역 : 프로그램의 코드 위치

- 스택 메모리 영역 : 프로그램이 실행될 때 필요한 메모리 공간

 

 

7.  stack frame

하나의 메소드를 호출하는데 필요한 메모리 덩어리

메소드 하나당 하나의 스택 프레임이 존재

ㄱ. 지역변수 (Local Variable)

ㄴ. 매개변수 (Parameter)

ㄷ. 리턴값이 저장되는 곳 (Return Value)

 

 

8. 메모리

ㄱ. 구성

- 스택 (Stack)

- 힙 (Heap)

 

* 가비지 콜렉터 (Garbage Collector) : 자바의 메모리 관리자 역할 (힙에 생성되는 객체의 메모리)

더이상 사용하지 않는 메모리나 불필요한 메모리 제거

메모리가 부족하면 메모리의 조각 모음을 함

'BackEnd > Java' 카테고리의 다른 글

Java :: 생성자(Constructor)  (0) 2016.03.18
Java :: 메소드 오버로딩 vs 오버라이딩  (0) 2016.03.18
Java :: 클래스  (0) 2016.03.16
Java :: 클래스 - 도입  (0) 2016.03.15
Java :: 데이터와 변수  (0) 2016.03.14

1. 클래스

데이터 타입 생성기

데이터와 메소드가 결합된 형태의 사용자 정의 데이터 타입

여러 개의 작업을 하나로 묶어서 관리할 수 있는 작업의 덩어리. 사용자가 필요로 할 때 작업을 대표하는 이름을 통해 반복적으로 호출 가능

 

ㄱ. 구성 요소 : 멤버변수, 멤버필드 - 클래스가 살아 있는 동안만 생존

  멤버메소드 - 클래스의 메소드 안에서만 선언되고 메소드 안에서만 사용되고 사라짐

 

* JDK (Java Development Kit) : 자바 컴파일러를 포함한 개발 도구

- SE (Standard Edition) : 표준 개발 환경

- EE (Enterprise Edition) : 기업 솔루션 개발 환경

- ME (Micro Edition) : 모바일 솔루션 개발 환경

=> EE이든 ME이든 기초는 SE에서 출발함

 

* JDK 설치 : 자바 설치 후 환경 설정을 위해 설치 디렉토리를 기억해야 함

- java.exe : 실제 컴파일러 역할

- javac.exe : 자바 프로그램의 실행을 위한 명령 해석기 역할

 

* JAVA DOC API : 사용한 클래스 라이브러리의 도움말을 HTML 형태로 제공. 클래스 설명서와 같은 역할

 

* 자바의 환경 설정

ㄱ. 자바의 bin 디렉터리 경로(path) 설정

ㄴ. 현재 작업하는 디렉터리의 클래스 패스(class path) 지정

 

 

2. 메소드

ㄱ. 분류

일만 하는 메소드 - 리턴하는 값이 없음 => void 형으로 메소드를 선언

일한 후 값을 리턴하는 메소드 : 값을 리턴함

 

* return : 메소드의 종료

메소드를 끝내기 위해서는 메소드 내의 모든 작업을 완료하던지, 아니면 return을 통해 메소드의 특정 부분에서 작업을 끝내면 됨

만약 값을 가지고 리턴한다면 반드시 리턴하는 값의 형을 메소드의 선언부에 명시해야 함

리턴하지 않는다면 void형으로 명시

 

ㄴ. 메소드의 프로토타입(형태) : 리턴 타입 + 메소드 이름(매개변수)

ex. 자판기에 돈을 넣으면 음료가 나온다

- 자판기 : 주체 (메소드 이름)

- 돈 : 매개변수, 시작점

- 음료 : 리턴 타입, 결과

 

ㄷ. 메소드 생성시 주의점

- 하나의 메소드는 한 가지 기능만 구현

- 반복적으로 수행되는 여러 문장을 하나의 메소드로 정의

- 관련된 여러 문장을 하나의 메소드로 정의

- 리턴값과 선언부에 명시된 리턴타입은 반드시 일치해야 함

- 값을 리턴하고자 할 때만 리턴해야 함

- 호출시 매개변수의 갯수와 매개변수의 형을 맞춰서 호출해야 함

- 메소드 이름은 동작적인 의미를 사용하는 것이 좋음

- 메소드 이름은 소문자로 시작, 이름 중간에 새로운 단어가 들어가면 대문자로 시작

 

ㄹ. 종류

- call by name : 메소드 이름에 의해 호출. 특정 매개변수가 없음(정적일 때)

- call by vaule : 메소드 이름으로 호출시 특정 매개변수를 전달함(동적일 때) => 그 값을 기초로 실행

- call by reference : 매개변수로 사용되는 값이 특정 위치를 참조하는 reference 함수

 

* 메소드는 변수의 역할을 할 수 있다 => 기본 데이터 타입 변수 : 직접 할당 / 메소드 : 간접 할당

- 직접 할당 : 변수의 재할당 (ex. int x = 5;)

- 간접 할당 : 메소드의 재할당 (ex. int x = sum(1, 2); / x = sum(3, 4);)

 

* 리턴 값을 가진 메소드는 호출과 동시에 그 자체로 변수의 역할이 가능

* 메소드의 리턴값이 존재한다면 호출되었을 때 하나의 변수로서의 역할을 하게 됨

 

* 값 복사 (Value Copy)

메모리가 둘 다 존재하는 상태에서 한 쪽의 메모리에 들어 있는 값을 다른 쪽의 메모리로 복사하는 행위

(ex. a = b)

자바에서 메소드 호출시 매개변수가 전달되는 방식은 전부 값 복사를 이용하고 있는 것

 

* 멤버 (Member)

ㄱ. 클래스 내의 변수 : 멤버필드, 멤버변수

ㄴ. 클래스 내의 메소드 : 멤버메소드

 

* 인스턴스 변수

Example example = new Example();

example.멤버변수();

객체의 멤버메소드를 쓰려면 객체 생성(인스턴스 생성) 먼저 해야 함

- 멤버변수 : public 속성이거나 default 속성이어야 함(private : getter / setter 통해서만 가능)

 

* 데이터와 메소드가 분리되어 있을 때의 문제점

- 메소드 호출 시마다 데이터를 매개변수로 넘겨줘야 함

- 특정 데이터를 사용하는 메소드가 몇 개인지 알 수 없음

- 특정 데이터를 사용하는 메소드를 묶어서 관리할 수 없음

 

 

3. 접근 제어

새로운 데이터 타입을 만들고 그 데이터 타입으로 객체를 선언한 후 객체 내의 멤버 변수에 값을 할당할 때, 값을 직접 할당할 수 있는가 없는가를 결정하는 접근 제한자(Access Identifier)

메모리를 이용한 객체에 접근하여 멤버에 점을 찍고 접근할 수 있는지 없는지를 결정함

 

ㄱ. 목적

- 자료의 은폐화(Encapsulation)

 

ㄴ. 접근 제어 방법

- 객체를 이용한 멤버의 접근 제어

- 상속관계에서 클래스와 하위 클래스간의 접근 제어

 

ㄷ. 접근 지정자의 종류

- public : 다른 클래스, 다른 패키지에서도 접근 가능

- private : 같은 패키지 내의 같은 클래스 내에서만 접근 가능

- protected : 같은 패키지 내에서만 접근 가능

- default : 접근 지정자를 생략하고 클래스를 선언한 경우. 같은 패키지 내의 클래스들만 접근 가능

 

* 오로지 public 메소드만이 private에 접근 가능

 

* private를 사용하는 이유

- 자료를 보호하기 위해 => public 멤버 메소드를 통해서만 접근하게 함(은폐화, 캡슐화, 자료 보호) (getter / setter)

- 내부적으로만 사용하기 위해

 

* 메모리 생성

- 데이터 타입에 해당하는 만큼의 메모리를 확보하는 일

- new 연산자를 사용하고 무조건적으로 생성자를 호출

 

* 객체 : 클래스를 이용하여 새로운 데이터 타입을 만드는 것

  기본 데이터 타입의 변수와 구별하기 위해 객체라고 칭함

 

* == 연산자 : 자바에서 클래스의 참조값을 비교할 때 사용

 

* 참조값 (Reference Value)

- 객체의 메모리를 생성시 메모리와 연결된 유일한 숫자값

- 이 숫자값을 참조 변수가 받으며 자바에서는 참조값으로 해당 객체를 제어 가능

- 참조값으로 작업시 내부에서 참조값에 연결된 메모리로 작업하는 것과 같은 효과

=> 객체를 하나 생성하면 객체 변수를 위한 공간 / new 했을 때 힙 영역에 생성되는 객체 자체의 메모리 공간

이렇게 2가지가 생성됨

 

* 하나의 파일에 여러 개의 클래스가 존재할 때 하나의 클래스만 public 클래스가 될 수 있음

  보통 main을 포함한 클래스를 public 클래스로 둔다

'BackEnd > Java' 카테고리의 다른 글

Java :: 메소드 오버로딩 vs 오버라이딩  (0) 2016.03.18
Java :: 자바의 기본  (0) 2016.03.18
Java :: 클래스 - 도입  (0) 2016.03.15
Java :: 데이터와 변수  (0) 2016.03.14
Java :: 삼항 연산자  (0) 2016.03.13

1. 구조체

데이터 타입 생성기

사용자가 직접 데이터 타입을 디자인할 수 있는 도구

변수 선언과 동시에 메모리가 생성됨

기본 데이터 타입은 변수 선언 + 메모리 생성

클래스의 기본 개념 포함하고 있음

구조체가 모여서 클래스가 됨

 

* 구조체 + 메소드 = 클래스

 

 

2. 자바 소스 파일을 작성할 때의 주의 사항

ㄱ. 자바 코드의 파일명과 확장자 : 클래스 이름과 파일명은 동일하다

소스 파일은 .java 파일을 사용한다

ㄴ. 클래스 파일 : 코드를 컴파일하면 클래스명과 동일한 .class 파일이 생성된다

즉 컴파일된 결과 파일은 .class 확장자가 붙는다

main() 을 포함한 클래스가 실행 클래스가 된다

 

* 클래스는 변수 이름만 주는 것이 아니라 new 연산자와 생성자를 이용하여 메모리를 생성해주어야 한다

 

* 상수 < 변수 < 데이터 타입

 

 

3. 클래스

변수 선언 + 메모리 선언

여러 개의 변수를 묶어서 하나의 새로운 데이터 타입을 만드는 것

 

* 메모리가 생성됐을 때(클래스) 메모리의 각 부분에 접근할 수 있는 방법을 제공하는 것(변수)

'BackEnd > Java' 카테고리의 다른 글

Java :: 자바의 기본  (0) 2016.03.18
Java :: 클래스  (0) 2016.03.16
Java :: 데이터와 변수  (0) 2016.03.14
Java :: 삼항 연산자  (0) 2016.03.13
Jsp :: jsp 페이지 구성 요소  (0) 2016.03.03

+ Recent posts