java

반응형

오늘은 Java 기본형(primitive type)과 참조형(reference type) 종류 및 특징,사용 이유에 대해 시작하겠습니다.

 

자바는 크게 기본형(primitive type), Wrapper Class 참조형(reference type)으로 나눠진다.

Primitive(머티브) 자료형(기본형 타입)

종류


byte

short

int

long

float

double

char

boolean

void

 

이것들을 Primitive 자료형이라 부른다.

 

 

특징


모두 첫 글자가 소문자

산술 연산이 가능함.

null 초기화 없음.

int a = null; (x)
int a = 0; (o)

 

Wrapper 클래스(포장 클래스)

 

종류


Byte 

Short 

Integer 

Long 

Float 

Double 

Charater 

Boolean 

Void

 

 

특징


모두 첫 글자가 대문자
산술
연산 불가

null 초기화 있음.

DB 연동시 DTO 객체에 null 필요한 경우 사용 있음

 

 

사용 이유


1. 매개변수로 객체가 요구 될때.

2. 기본형 값이 아닌 객체로 저장해야 할 때.

3. 객체간의 비교가 필요할 때.

 

 

그리고

Boxing과 Unboxing의 개념을 알아야 합니다.

Boxing

개념


Primitive 자료형 -> Wrapper 클래스

기본형 자료형을 포장 클래스로 변환한다.

int primitive_age = 30;
Integer wrapper_age = new Integer(primitive_age);

 

Unboxing

개념


Wrapper 클래스 -> Primitive 자료형

포장 클래스를 기본형 자료형으 변환한다.

Integer wrapper_age = new Integer(30);
int primitive_age= wrapper_age.intValue();

 

 

정리

객체 박스(Wrapper 클래스) 정수를 담는다. (Boxing)

박스에 담겼으니 안에 내용물을 바꾸는건 불가능하다.

 

바꾸려면 박스에서 내용물을 꺼낸다. (Unboxing)

내용물을 다시 꺼냈으니 바꾸는게 가능해짐.

 

Integer - Wrapper 클래스

int - 기본 자료형

 

여기서 잠깐!

Integer obj = new Integer(61); 아니라

Integer obj = 61;로 해도 61 정수가 자동으로 박스에 담긴다.

이건 무엇일까??

 

[JDK 1.5 버전 이후 사용 가능]

그것이 바로 AutoBoxing AutoUnBoxing 기능이다.

 

AutoBoxing

 

개념


int num1 = 61;
Integer obj = num1;

int num1의 값을 Integer 객체에 넣기 위해서는(Boxing) new Integer(num1) 과 같이 객체를 생성해야 하지만,

위와 같이 대입하면 AutoBoxing이 자동으로 진행된다.

 

 

AutoUnBoxing

 

개념


Integer obj2 = new Integer(69);
int num1 = obj2;

Integer 객체에 있는 int 값을 가져오기 위해서는(UnBoxing) obj2.intValue() 메소드를 사용하여 가져와야 하지만,

위와 같이 int 형 변수에 Integer 객체를 대입하면 자동으로 UnBoxing이진행된다.

 


주의

AutoBoxing과 AutoUnBoxing 은 단지 기본형 타입과 상응하는 Wrapper class에만 일어난다.

다른 경우에 대입을 시도하면 컴파일 에러가 발생한다.

- Integer intValue(), Double doubleValue() 등만 AutoBoxing과 AutoUnBoxing이 발생한다.

Double obj = 3.14;
int num1 = obj.intValue() ; (O)
int num1 = obj; (X)

 

* Wrapper 클래스의 기본 메소드들

 메소드

반환값 

설명 

 booleanValue()

boolean 

기본형 데이터를 문자열로 바꾼 뒤에 반환 

 byteValue()

byte 

객체의 값을 byte 값으로 변환하여 반환 

doubleValue() 

double 

객체의 값을 double 값으로 변환하여 반환 

floatValue() 

float

객체의 값을 float 값으로 변환하여 반환 

intValue() 

int 

객체의 값을 int 값으로 변환하여 반환 

longValue() 

long 

객체의 값을 long 값으로 변환하여 반환 

 shortValue()

short 

객체의 값을 short 값으로 변환하여 반환 

Wrapper class 객체에서 해당 메소드를 사용은 형변환이 가능한 메소드만 사용이 가능하다.

 

+추가

Integer.parseInt("100") , Integer.valueOf("100") 이 둘의 차이점이 헷갈린다면 참고

 

[Java] parseInt()와 intValue()

오늘은 Java parseInt() && intValue() 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다 . parseInt() 개념 static 이다, 그러므로 Integer 생성안하고 parameter만 넣어주면 메소드를 수행할 수 있다..

java119.tistory.com

 

반응형
반응형

오늘은 Java 오버로딩(Overloading)과 오버라이딩(Overriding) 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다.

시작하기에 앞서, 먼저 오버로딩과 오버라이딩의 공통점은

 

다형성을 지원하는 방법이다.

다형성을 지원하는 방법

다형성을 지원하는 방법

 

 

오버로딩(Overloading)

 

개념


같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술

 

 

조건


메소드 이름 동일해야됨

매개변수의 개수 또는 타입이 달라야.

매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
(리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.)

 

 

사용 이유


java내에서 제공하는 src.zip 내에 있는 java\lang\System.java을

뜯어보면

 

~ 대표적인 오버로딩으로는 System.out.println() 있다.

 

오버로딩이 만약 없다면?

void println()

void printlnBoolean(boolean x)

void printlnChar(char x)

void printlnString(String x)

void printlnDouble(double)

 

모두 근본적으로는 같은 기능을 하는 메서드들이지만, 서로 다른 이름을 가져야하기 때문에 메서드를 작성하는 쪽에서는 이름을 짓기 어렵고, 메서드를 사용하는 쪽에서는 이름을 일일이 구분해서 기억해야 하기 때문에 서로 부담이 된다.

 

하지만, 오버로딩을 통해 여러 메서드들이 println이라는 하나의 이름으로 정의될 수 있다면, println이라는 이름만 기억하면 되므로 기억하기도 쉽고 이름도 짧게할 수 있어서 오류의 가능성을 많이 줄일 수 있다. 그리고 메서드의 이름만 보고도 '이 메서드들은 이름이 같으니, 같은 기능을 하겠구나'라고 쉽게 예측할 수 있다.

 

문법


// Cosmetics.java file
public class Cosmetics {

public void produce(int water,int oil,int essence) {

System.out.println("제조 비율 "+water+"% "+oil+"% "+essence+"%");

}

public void produce(int water,int oil,int essence,int nmw) {

System.out.println("제조 비율 "+water+"% "+oil+"% "+essence+"%"+nmw+"% ");

}

public void produce(String execp) {

System.out.println("제조 불량 "+execp);

}

public void produce(double water,double oil) {

System.out.println("제조 비율 "+water+"% "+oil+"% ");

}
}

// Innis.java file
public class Innis {

public static void main(String[] args) {

Cosmetics co = new Cosmetics();

co.produce(20, 40, 60);
co.produce(20, 40, 20 , 20);
co.produce("불량품");
co.produce(22.33,55.6678);

}
}

설명 : 같은 produce 메소드이지만 매개변수,타입이 모두 다르다.

 

오버 라이딩(Overriding)

 

개념


상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메소드도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다. 하지만, 하위 클래스에서 메소드를 재정의해서 사용할 수 있다.

 

한마디로 상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술

 

 

조건


메소드 이름 동일해야됨

매개변수,타입 동일해야됨

리턴타입이 동일해야됨

메소드의 static 예약어를 붙이면 안됨

 

 

사용 이유


그대로 재정의 사용합니다.

 

추상 클래스를 설명할 예로 들었던

화장품 클래스를 다시 꺼내서 설명하겠습니다.

 

화장품이라는 부모클래스를 상속 받는다.

기본 제조 메소드

40% + 기름 40% + 에센스 20%

 

이니x프리 클래스 상속 화장품

@오버라이딩

제조 메소드

70% + 기름 10% + 에센스 10% + 천연암반수 10% (추가)

 

올리x영 클래스 상속 화장품

@오버라이딩

제조 메소드

50% + 기름 49% + 에센스 1%

 

[Java] 상속이란?

 

[Java] 상속

오늘은 Java 상속 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다. 개념 우리가 생각하는 상속이라는 단어가 맞다. 현실 세계에서 부모님이 자식들에게 재산을 물려주는 것과 비슷하다. 차이라고 하..

java119.tistory.com

 

문법

화장품 클래스 (부모)

public class Cosmetics {

public int water;
public int oil;
public int essence;

public void produce() {
System.out.println("제조 비율"+this.water+"% "+this.oil+"% "+this.essence+"%");
}

}

 

이니스x 클래스 (자식)

public class Innis extends Cosmetics {

int nmw;

@Override

public void produce() {
System.out.println("제조 비율 물 "+water+"% 기름 "+oil+"% 에센스 "+essence+"% 천연암반수 "+nmw+"% ");
}

}

 

구현 클래스

public class Ex {

public static void main(String[] args) {

Innis ins = new Innis();

ins.water = 20;
ins.oil = 20;
ins.essence = 20;
ins.nmw = 40;

ins.produce();

}
}

설명 : 이니스x프리 클래스가 화장품 클래스의 produce 메소드를 상속 받아 재정의 하였다.( int nmw을 추가)

 

+면접 단골 질문

오버로딩과 오버라이딩의 차이점

 

정리

1.오버로딩

같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술

코드의 통일성 , 효율성을 높일 있다.

2.오버라이딩

상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술

 

둘의 공통점은 다형성을 지원하는 방법

반응형

[Java] parseInt()와 intValue()

2019. 10. 29. 10:23
반응형

오늘은 Java parseInt() && intValue() 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다 .

 

parseInt()

 

개념


static 이다, 그러므로 Integer 생성안하고 parameter만 넣어주면 메소드를 수행할 수 있다.   

쉽게 말하자면

string형 객체에서 int형 값을 뽑아내는 메소드이다. 

 

Integer 생성안한다

Integer 생성안한다

Integer 생성안한다

3번 강조

 

Integer 생성안한다 == 즉 Integer(Object) 라는 박스를 만들지 않고 (래퍼 클래스와 언박싱,박싱)

내용물(String) -> 내용물(int) 교체한다.

 

 

사용 이유


String형 객체에서 int형 값을 뽑아 내는 메소드

문자형을 정수형으로 만든다.

위 내용과 같이 내용물(String) -> 내용물(int) 교체 할 때 사용

 

 

문법


int 변수 = Integer.parseInt(숫자값으로 된 String);

 

바로 예시

String str = "119";

int i = Integer.parseInt(str);

 

 

 

 

intValue()

 

개념


static이 아니며 Integer 객체에서 int형 값을 뽑아내는 메소드이다

Integer는 (int Value와 String Value) 두 가지가 있다.

 

Integer 객체에서~

객체에서~

객체에서~

3번 강조

 

뽑아낸다 즉 Object -> int 이 말이다.

객체란 말이 뭔지는 모르겠지만 우리는 일단 하나의 박스라고 생각하자.

객체란 박스에서 내용물을 꺼내야 int 라는 내용물로 옮길 수 있다.

언박싱 해줘야 한다.

 

Integer -> 잇섭(언박싱) -> int 변환

 

사용 이유


객체에 내용 값을 정수로 변환하기 위함.

 

 

문법


Integer i = new Integer(150);
i.intValue();

 

바로 예시

int i = Integer.valueOf(str).intValue();

 

사용 사례

 

[Java] java.lang.ClassCastException

예외 상황1 원인 심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Long..

java119.tistory.com

 

정리

상황에 맞는 함수 쓰기

1.내용물 -> 내용물 형변환 Integer.parseInt()

2.객체 -> 내용물 변환 intValue();

 

 

 

 

반응형
반응형

예외 상황1

 

원인


심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer] with root cause

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

 

클래스 형 변환(캐스팅) 연산을 잘못 했을 때 발생한 예외

 

HashMap 있는 숫자값으로 이루어진 Object(Wrapper) 정수형 DTO 언박싱 하려다가 예외문이다.

 

Object 객체를 int 바로 넣을려고 했다가 나온 예외다.

 

 

해결 시도


Integer.parseInt(Object)

parseInt() 사용하면 당연하게 알았지만..

 

심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer] with root cause

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

 

 

 

해결


((Long) userService.getAttendanceList(currentUser)).intValue();

 

해결 코드 문법

HashMap<String, Object> result = new HashMap<>();
Dto_graph dto = new Dto_graph();

result = menuservice.serviceCount();
dto.setnServiceCount( ((Long) result.get("cnt1")).intValue() );
dto.setnFreeVMCount( ((Long) result.get("cnt2")).intValue()) ;
dto.setnVMCount( ((Long) result.get("cnt3")).intValue() );

 

예외 상황 정리

1.캐스팅 관련 예외 (잘못된 형변환)

 

 

예외 상황2

 

원인


참조한 라이브러리 안의 클래스가 중복되어 정확한 경로를 찾지 못하여 발생하는 것이다.

 

Java로 만든 프로그램 배포를 위해 톰캣(WAS)로 패키징을 하는 경우가 많다.

 

이 때 이클립스에서 잘 작동하던 프로그램이 패키징을 하고 나면 다음과 같은 에러가 발생할 때가 있다.

java.lang.ClassCastException : A cannot be cast to B

 

해결


톰캣은 최상위 lib 디렉터리에 톰캣 관련 라이브러리를 넣고 WEB-INF 밑의 lib 디렉터리에 자바 라이브러리를 넣는다.

 

에러의 원인은 참조한 라이브러리 안의 클래스가 중복되어 정확한 경로를 찾지 못하여 발생하는 것이다.

 

따라서 두개의 lib 디렉터리 중 한군데에만 적용을 시켜주면 해결이 된다.

 

 

예외 상황2 정리

1.참조하는 라이브러리 경로 문제.

2.멀쩡하던게 다른데로 옮겼다고 예외가 뜨면 경로 문제가 대부분이다.

반응형

'java' 카테고리의 다른 글

[Java] 오버로딩(Overloading)과 오버라이딩(Overriding)  (0) 2019.10.30
[Java] parseInt()와 intValue()  (0) 2019.10.29
[Java] 상속  (0) 2019.10.27
[Java] 추상 클래스  (0) 2019.10.26
[Java] 예약어 정리  (2) 2019.10.23

[Java] 상속

2019. 10. 27. 22:52
반응형

오늘은 Java 상속 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다.

 

개념


우리가 생각하는 상속이라는 단어가 맞다. 현실 세계에서 부모님이 자식들에게 재산을 물려주는 것과 비슷하다. 이라고 하면 자식(클래스)이 상속받고 싶은 부모(클래스)를 선택해서 물려받는다. 이때 상속받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부른다. 상속을 해주는 클래스를 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다

 

부모 클래스(parent class) 와 자식 클래스(children class)는 자바 예약어 extends 정해짐

 

 

 

 

사용 이유


중복된 코드를 줄일 수 있고, 유지 보수가 편리하며, 통일성이 있고 다형성을 구현

 

 

 

 

문법


 

하나의 부모- 여러 자식 O

하나의 자식 - 여러 부모 X

 

자식 - 부모 클래스의 자원을 모두 사용 가능

  • 자식클래스도 부모 클래스가 있음
  • 부모 클래스가 상속받은 자원도 사용 가능 (조상 클래스의 자원)
  • 부모 클래스로부터 받은 자원을 Override 하여 수정 가능

부모 - 자식 클래스 자원 사용 X

 

바로 예시

 

회사 클래스 (최상위 - 조상)

public class Company{}

 

부서 클래스 (상위 - 부모)

public class Department{}

 

회사원 클래스 (하위 - 자식)

public class Employee{}

 

public class Employee extends Department (부서를 상속 받은 회사원 클래스)
//Employee(자식)는 조상 클래스 Company의 자원까지 모두 사용 할 수 있다.

public class Department extends Company (회사를 상속 받은 자식클래스 부서)

public class Company (최상위 회사)

 

※주의

자식 클래스가 부모 클래스로부터 상속을 받게 되면 부모 클래스의 필드와 메서드를 물려받게 된다. 단, 접근제어자가 private을 갖는 필드나 메소드는 상속이 불가하고, 패키지가 다를 경우 접근제어자가 default인 경우도 상속이 불가하다.

 

 

 

정리

1. 상속 방법 : class 클래스(자식) extends 클래스(부모)

2. 자식 클래스는 부모 클래스로부터 메소드와 필드를 물려받아 사용한다. 부모 클래스는 자식 클래스에서 정의한 메소드나 필드를 사용하지 못한다.(자식 = 자신 + 부모 / 부모 = 자신)

3. 자식 클래스는 여러 부모 클래스로부터 상속받지 못한다. 즉, 단일상속만 가능하다.

4. 부모 클래스는 여러 자식 클래스에게 상속이 가능하다.

5. 자식 클래스가 더 다양한 기능이 가능하므로 자식 클래스로 인스턴스를 생성하는 것이 효율적이다.

6.접근제어자가 private 갖는 필드나 메소드는 상속이 불가하다.

    

 

반응형

'java' 카테고리의 다른 글

[Java] parseInt()와 intValue()  (0) 2019.10.29
[Java] java.lang.ClassCastException  (0) 2019.10.28
[Java] 추상 클래스  (0) 2019.10.26
[Java] 예약어 정리  (2) 2019.10.23
[Java] 지역변수와 전역변수  (1) 2019.10.23

[Java] 추상 클래스

2019. 10. 26. 23:17
반응형

오늘은 Java 추상 클래스 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다.

 

개념


추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미합니다. 라고 적혀져있습니다.

 

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

3번 강조

 

구체적 예시를 들어보겠습니다.

 

화장품 클래스

화장품 제조 메소드

화장품 A - 물 30% 에센스 30% 거품 40% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

화장품 B - 물 80% 에센스 10% 거품 10% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

화장품 C - 물 50% 에센스 40% 거품 10% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

 

메소드를 공통적으로 쓰는 것

 

제조 메소드가 공통으로 쓰인다.

화장품 클래스 상속-A,B,C

 

실체클래스란?

실체가 드러나는 클래스 추상클래스는 실체 클래스의 공통적인 부분을 추출해 어느정도 규격을 잡아놓은 추상적인 클래스이다.

 

추상 클래스 : 실체클래스들의 공통적인 특성을 추출하여 틀을 잡아놓은 클래스

실체 클래스 : 객체를 직접 생성할  있는 클래스

추상클래스와 실체클래스는 상속적인 관계

 

 

 

사용 이유


자바에서 추상 메소드를 선언하여 사용하는 목적 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함

 

공통된 필드와 메서드를 통일할 목적

여러 명의 개발자가 동시에 개발했을 경우 추상메소드를 사용하지 않으면 메소드 이름,매개변수가 모두 제 각각일것이다. 나중에 뜯어고칠때 고생할 것이다.

 

유지보수,통일성 

 

실체클래스 구현시, 시간절약

화장품 클래스가 프레임워크가 되는 셈이다.

즉 뼈대가 만들어져있어 그 안에 내용만 구현하면 되니 시간절약이 많이 되고 효율적으로 일을 할 수 있다.

화장품 제조를 하라는데 화장품에 뭐가들어가는지도 모르는데 

추상 메소드를 사용한다면 그 안에 들어갈 매개변수가 있으므로 안에 내용만 구현하면 된다 

 

규격에 맞는 실체클래스 구현

화장품 클래스 규격

화장품 제조 메소드 사용시 물은 최소 20% 최대 70%로만 구현한다.

화장품 제조 메소드 사용시 에센스는 최소 05% 최대 20%로만 구현한다.

화장품 제조 메소드 사용시 거품은 최소 20% 최대 50%로만 구현한다.

 

이런식에 규격을 정하고 내용을 만들기 때문에 큰 틀에서 벗어날래야 벗어날 수 없다.

 

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

3번 강조

 

규격에 맞게 소스가 구현되어 있기 때문에 해당 규격에 대한 구현부만 수정하면 손 쉽게 수정이 가능하기 때문이다.

 

 

 

문법


추상클래스나 추상메소드를 선언하기 위해서는 이름 앞에 abstract이라는 키워드를 추가하면 된다.

 

abstract class 클래스이름 {

    ...

    abstract 반환타입 메소드이름();

    ...

}

abstract class Cosmetics { abstract void produce(int water,int essence,int bubble); }

class EAXXIE extends Cosmetics { 
@Override
void produce(int water,int essence,int bubble) 
{ System.out.println("물 "+water+"%"+" 에센스 "+essence+"%"+" 거품 "+bubble+"%"); } }

class DxG extends Cosmetics { 
@Override
void produce(int water,int essence,int bubble) 
{  water += 5;
System.out.println("물 "+water+"%"+" 에센스 "+essence+"%"+" 거품 "+bubble+"%"); } }

 

public class Ex {

    public static void main(String[] args) {

        // Cosmetics c = new Cosmetics(); // 추상 클래스는 인스턴스를 생성할 수 없음.

        EAXXIE c = new EAXXIE(); // 클래스 인스턴스 생성

        DxG d = new DxG(); // 클래스 인스턴스 생성

 

        c.produce(30,30,40); // 추상 메소드 재정의(오버라이딩)

        d.produce(70,20,10); // 추상 메소드 재정의(오버라이딩)

    }

}

 

 

 

정리

1. 추상클래스는 실체클래스의 공통적인 부분(변수,메서드)를 추출해서 선언한 클래스

2. 추상클래스는 객체를 생성불가 아직은 실체성이 없고 구체적이지 않기 때문에!

3. 추상클래스와 실체클래스는 상속관계!

4. 규격을 정해 큰 틀에서 벗어나지 않아 손 쉽게 수정 가능

반응형

[Java] 예약어 정리

2019. 10. 23. 14:32
반응형

자바 예약어

예약어(키워드)란? 

예약어란 자바에 등록되어 있어서 의미가 약속되어 있는 단어를 뜻합니다.

자바에 이미 예약어로 등록되어 있는 단어는 속성의 변수명, 메소드명으로 사용할 수 없으며

프로그래밍 과정에서 이렇게 특정 의미가 있는 단어를

프로그래머가 식별자로 사용하게 되면 에러나 버그가 발생할 수 있습니다.

따라서 자바를 사용하는 프로그래머라면 자바에서 쓰이는

예약어의 종류와 쓰임에 대해서 숙지하고 사용할 줄 알아야 합니다.

 

abstract : 추상 메소드 또는 추상 클래스에 사용된다.

abstract class A{}
abstract  method{}

 

boolean : 데이터 타입, true 와 false를 이용할때 사용한다.

boolean a = true;
if(boolean){}

 

break : 가장 가까운 루프문을 탈출한다. 또한 switch - case문을 종료한다.

for ( int cnt = 0; cnt < 10; cnt++) {
   System.out println(cnt);
   if ( cnt == 5 )       break;   }
  System.out.println("Done.");
 }
}

 

byte : 기본 데이터 타입, 1byte로 된 byte형이다.

byte a = 1;

 

catch :  try-catch 문, 예외처리에 쓰인다. try문에 에러가 났을때 말그대로 받는다는 뜻으로 그 try문의 에러를 받고 catch문을 실행한다.

try{  throw new Exception(); }catch (Exception e){ e.printStackTrace(); throw e; }

 

finally : try-catch 문, 예외처리에 쓰인다. try-catch문이 끝난 뒤에 실행할때 쓰인다.

try{}catch(Exception e){}finally{}

 

char: 기본 데이터 타입, 2byte로 된 character형이다.

char a= 'a';

 

class : 클래스를 의미한다.

Company.class

 

continue : 루프문의 조건절로 이동해 조건을 비교한다.

for ( int cnt = 0; cnt < 10; cnt++) {
  System.out println(cnt);
 if ( cnt == 5 )       continue;   }
 System.out.println("Done.");
 }
}

 

default : 접근제어자 또는 switch문에 쓰인다. 클래스, 메소드, 멤버변수 앞에 아무것도 선언을 하지 않았을 경우 default라는 예약어가 붙고, switch문에는 모든 case문에 해당하지 않을 경우 마지막으로 실행되는 역할을 한다.

switch(입력변수) { case 입력값1: ... break; case 입력값2: ... break; ... default: ... break; }

do : do-while루프에서 중괄호 전에 쓰이는 예약어다.

do{}while();

 

double : 기본 데이터 타입, 8byte로 된 실수형이다.

double a = 11.222

 

if : 조건문 중 하나로, if(조건)형태로 조건이 true면 실행, false이면 빠져나간다.

if(boolean){ }

 

else : if-else문에서 if문의 실행내용과 다른 내용을 실행할때 사용한다.

if(false){
}else {}

 

extends : 클래스를 상속받는데 사용된다.

class User extends Company{}

 

float : 기본 데이터 타입, 4byte로 된 실수형이다.

float a = 0.22f;

for : 반복문 중 하나로, for(초기값;조건식;증가값){}, for문자을 반복할때 쓰인다.

for(int i=0; i<array.length; i++){}

 

implements : 인터페이스를 구현할때 쓰인다.

class MenuServiceImpl implements MenuService

 

import : 패키지내에 클래스를 사용하고 싶을때 쓰인다.

import java.util.HashMap;

 

instanceof : 객체타입이 형변환이 가능한지 검사할때 사용된다. true 또는 false로 반환한다.

class A{}
A a = new A();
System.out.printIn(a instanceof A);

 

int : 기본 데이터 타입, 4byte로 된 정수형이다.

int a = 1004;

 

interface : 다중상속이 가능한 일종의 추상클래스이다.

public interface MenuService

 

long : 기본 데이터 타입, 8byte로 된 정수형이다.

long a = 111111L;

 

native : 자바가 아닌 다른 언어로 입력되었을때 알려주는 예약어다.

모르겠음

new : 인스턴스를 만들때 사용되는 예약어다.

list result = new List<>();

 

null : 메모리에 아무 값이 없다는 의미로 쓰인다.

String a = null;
return null;

 

package : 클래스들을 하나로 묶는다.

package com.company.projectName.attr;

 

private : 접근 제어자로 같은 클래스 내에서만 접근이 가능하다.

private String name;

 

protected : 접근 제어자로 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능하다.

protected String name;

 

public : 접근 제어자로 같은 클래스, 패키지, 자손 클래스에 상관없이 이용에 제한이 없다.

public String name;

 

return : 메소드를 종료 혹은 값을 반환할때 사용된다.

public int calc(int a,int b){
return a+b;
}

 

short : 기본 데이터 타입, 2byte로 된 정수형이다.

short a = 1;

 

static : 멤버변수, 메서드, 초기화 블럭에 사용이 가능하며, 멤버변수는 모든 인스턴스에 공통적으로 사용되는 클래스변수가 되며, 클래스변수, 메서드는 인스턴스를 생성하지 않고 사용할 수 있게 된다.

public static String name;

 

super : 상위 클래스로부터 상속 받은 멤버변수 또는 메소드에 접근할때 사용되는 참조변수이다.

super()

 

switch : 조건문으로 switch(조건식){case 값 : ~ break;}식으로 되있다. 조건식에는 정수 또는 문자열만 가능하다. case값은 정수 상수만 가능하며 중복되면 안된다.

switch(입력변수) { case 입력값1: ... break; case 입력값2: ... break; ... default: ... break; }

 

synchronized : 메소드를 동기화 또는 동기화 블럭 생성시 사용된다.

public synchronized void methodName(String a) {} (이름 너무길어)

 

this : 가까운 멤버변수나 인스턴스를 가르킬때 사용한다.

this.a

 

throw, throws : 예외를 던질때 사용한다.

try{  throw new Exception(); }catch (Exception e){ e.printStackTrace(); throw e; }

 

try : try-catch 문, 예외처리에 쓰인다. 예외 발생 코드를 try{}문안에 넣는다.

try{  throw new Exception(); }catch (Exception e){ e.printStackTrace(); throw e; }

 

void : 리턴값이 없다는 의미이다.

public void methodName(String a) {}

 

while : 반복문이며 while(조건식){} 조건식이 true인 동안 반복이 된다.

 while( 조건문 )
 { 수행할 작업 }
반응형
반응형

전역변수(Global variable) 지역변수(Local variables)

 

선언위치에 따른 변수의 종류

 

변수는 선언위치에 따라 전역변수지역변수로 나눠지는데

선언위치에 따라

선언위치에 따라 

기억!!

 

말그대로 전체에서 어디서든 호출하면 사용할수 있는 변수는 전역변수

특정한 구역({ })안에 생성되어 그 지역에만 사용할수 있는 변수는 지역변수라고 생각하면 된다.

 

바로 예시

class Ex_variables{

int global_int;           // 전역변수(객체변수) : 같은클래스에서 호출이 가능

static int global_statuc_int; // 전역변수(클래스변수) : 다른 클래스에서도 호출이 가능

void method()

{

int local_int = 0;  //지역변수 { }안에 생성되며 { }를 벗어나면

}                //method() 라는 메소드가 끝나는 시점에 바로 삭제

}

 

예시2

class Ex_variables2 {

    int global_v;

   void addmethod(int a, int b)
   {
        global_v  =  a  + b;
   } 

} 

1. addmethod 실행 내용

a+b 값이 global_v (전역변수) 변수에 들어간다.

2 .addmethod 실행 끝과 동시에 a,b 지역변수 사망

3 .global_v 전역변수이기때문에 값이 살아있음.(a+b 더한 )

 

하지만 전역변수도 종류가 있다.

1.객체변수 == 인스턴스 변수

객체변수는 클래스영역에서 선언되며 클래스의 객체를 생성할 때 만들어진다.

즉 객체화를 시켜서 호출해야지만 사용이 가능

 

2.클래스변수 == static 변수

객체화를 시키지 않고도 사용이 가능하며

객체변수가 객체화 시킬때마다 서로 다른 저장공간을 가지는 반면

클래스변수는 여러번 객체화 시켜도 공통적인 저장공간을 가지게 된다.

 

여기서 서로 다른 공간이란 객체가 만들어지면서 새로운 해쉬값을 가지게 되는데 그것을 칭하는

클래스 변수는 같은 해쉬값 놀이터에서 놀고,

객체 변수는 새로운 해쉬값 놀이터를 계속 만들어 논다.

 

문법

객체변수

자료형 변수이름;

int localVar = 1;
String localVarstr = "local";

 

클래스 변수

static 자료형 변수이름;

static int localVar = 1;
static String localVarstr = "local";

예시3

class Card {

String kind;           

int number;

static int width = 200;  

static int height = 300;    

}

설명

객체 변수
String kind;
int number;


클래스변수
static int width = 200;    
static int height = 300; 

전역변수 설명의 영원한 친구 카드 클래스…

public class Ex_variables3 { 

public static void main(String[] args){ 

System.out.println("Card의 너비는 :"+ Card.width); 
System.out.println("Card의 높이는 :"+ Card.height); 

Card c1 = new Card(); 
c1.kind = "Heart"; 
c1.number = 7; 

Card c2 = new Card(); 
c2.kind = "Spade"; 
c2.number = 4; 

c1.width = 250; 
c1.height = 350; 

} 
}

설명

System.out.println("Card의 너비는 :"+ Card.width);

System.out.println("Card의 높이는 :"+ Card.height);

static 붙음 클래스 변수는 클래스명.변수명으로 직접 호출(사용) 가능

해쉬값 동일

 

Card c1 = new Card();

c1.kind = "Heart";

c1.number = 7;

 

객체 생성(이때 다른 해쉬값을 가진다는거)

객체 생성 클래스명.변수명으로 객체변수를 다룸

궁금한 사람 c1.hashCode(); c2.hashCode();

c1.kind = "Heart"; c1 객체만의 kind 값이 되는것.

 

Card c2 = new Card();

c2.kind = "Spade";

c2.number = 4;

마찬가지로 c2.kind = "Sqade"; c2 객체만의 kind 값이 되는것.

 

c1.width = 200;

c1.height = 300;

c1 객체가 클래스 변수에 값을 다르게 지정

클래스 변수를 다르게 지정 했음으로 c2 width,height 동일하게 변경

 

클래스 변수 놀이터(해쉬값) 하나밖에 없는데 변경되면 같이 변경되는게 당연

객체 변수 놀이터(해쉬값) 지들이 새로만들어서 쓰기 때문에 변경해도 자기 놀이터만 변경됨.

 

정리

1.지역변수와 전역변수의 구분은 선언한 위치에 따라다르다.

2.전역변수는 어디서나 호출 가능하고 지역변수는 Method 안에 서식한다.

3.전역변수 종류는 두가지로 객체변수,클래스변수가 있다

4.객체변수는 같은 클래스에서만 자유롭게 사용가능하고, 클래스 변수는 다른 클래스에서도 사용이 가능하다.

5.클래스 변수는 해쉬값이 같고,객체 변수는 객체 선언마다 다른 해쉬값이 생성된다.

반응형

+ Recent posts