추상이란?

여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용.

추상화와 구체화

· 추상화 : 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업.

· 구체화 : 상속을 통해 클래스를 구현, 확장하는 작업.

추상 클래스란?

· 추상 메서드를 포함하고 있는 클래스.

· 클래스를 설계도에 비교하자면 추상 클래스는 미완성의 설계도라고 볼 수 있다.

· 미완성의 설계도로 제품을 만들 수 없듯이, 추상 클래스로 인스턴스를 생성할 수 없다. 오직 상속을 통해서 자손 클래스에 의해서만 구체화 된다.

 

추상 클래스 표현 방법

class 앞에 abstract라는 키워드를 붙이면 된다.

 

abstract class 클래스이름 {
}

 

참고

· 추상 클래스는 추상 메서드를 포함하고 있다는 것을 제외하고 일반 클래스와 다르지 않다.

· 추상 클래스에도 생성자가 있으며, 멤버 변수와 메서드도 가질 수 있다.

· 추상 메서드가 없더라도 일반 클래스에 abstract를 붙여서 추상 클래스로 만들 수 있는데, 이렇게 하면 추상 클래스로 지정되어 인스턴스를 생성할 수 없다.

 

 

추상 메서드

· 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것.

· 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만 작성하고 내용을 비워두는 것.

 

추상 메서드 표현 방법

선언부 맨 앞에 abstract라는 키워드를 붙이면 된다.

 

abstract 리턴타입 메서드이름();

 

 

'프로그래밍 > Java' 카테고리의 다른 글

에러(error)와 예외(exception)  (0) 2017.08.27
인터페이스(interface)란?  (0) 2017.08.25
다형성(polymorphsim)  (0) 2017.08.21
접근 제어자 (Access Modifier)  (0) 2017.08.19
오버로딩과 오버라이딩  (0) 2017.08.14

WRITTEN BY
김치치즈스마일
세계정복!

,

다형성이란?

다형성은 이름 그대로 여러가지 형태를 가질 수 있는 능력을 의미 한다.

자바에서는 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 한 것이다.

 

참조변수의 형변환

· 자손타입 → 조상타입 (Up-Castring) : 형변환 생략 가능

· 자손타입 ← 조상타입 (Down-Casting) : 형변환 생략 불가

· 형변환은 참조변수의 타입을 변환하는 것이지 인스턴스를 변환하는 것은 아니기 때문에 인스턴스에 아무런 영향을 미치지 않음.

단지, 참조변수의 형변환을 통해, 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 개수를 조절하는 것 뿐.

 


WRITTEN BY
김치치즈스마일
세계정복!

,

접근 제어자(Access Modifier)란?

제어자란 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여하는 것을 말한다.

그 중에서 접근 제어자는 멤버 또는 클래스에 사용되어, 해당 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할은 한다.

 

접근 제어자의 종류

· default - 같은 패키지 내에서만 접근이 가능. (실제로 default를 붙여서 사용하지는 않음)

· private - 같은 클래스 내에서만 접근이 가능. (객체 입장에서는 접근이 불가능)

· protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능. (상속 관계에서는 public, 객체 입장에서는 private)

· public - 접근 제한이 없음.

 

제어자 

같은 클래스 

같은 패키지 

자손 클래스 

전체 

public 

O

O

O

O

protected

O

O

O

 

default 

O

O

 

 

private 

O

 

 

 

 

접근 제어자를 사용하는 이유

· 외부로부터 데이터를 보호하기 위해서.

· 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서.

 

 

[참고] 자바의 정석


WRITTEN BY
김치치즈스마일
세계정복!

,

오버로딩과 오버라이딩, 이름이 비슷해서 간혹 헷갈릴 때가 있을 것이다. (없으면 말고...)

그래서 이참에 오버로딩과 오버라이딩이 무엇인지 정리해보기로 했다.

 

오버로딩 (Overloading)

오버로딩이란 먼저 사전에서 overloading을 찾아보면 과적하다라고 나온다. 즉, 적재적량을 초과하여 많이 싣는 것을 의미한다.

Java에서의 오버로딩은 하나의 메서드 이름으로 여러 기능을 구현하기 때문에 이런 이름이 붙여진 것 같다.

 

오버로딩의 조건

· 메서드 이름이 같아야 한다.

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

· 매개변수는 같고 리턴 타입이 다른 경우는 오버로딩이 아니다.

 

Java에서 오버로딩의 예

println 메서드를 보면 매개변수의 타입들이 다른 것을 볼 수 있다.

 

오버로딩의 장점

어떤 이유 때문에 오버로딩을 사용할까?

만약 위에서 예를 든 println과 같이 같은 기능인데 매개변수가 다를 경우 어떻게 해야할까? 오버로딩이 없다면 printlnWithString, printlnWithInteger와 같이 이름을 각각 다르게 지어줘야 한다. 그래서 오버로딩을 사용하면 메서드의 이름을 간결하고도 짧게 지어서 같은 기능이면 같은 이름으로 묶어서 사용하여 메서드 이름을 절약할 수 있고 어떤 기능을 하는지도 쉽게 알 수 있다.

 

 

오버라이딩 (Overriding)

오버라이딩이란 사전에서 overriding을 찾아보면 다른 무엇보다 더 중요한 또는 최우선시 되는 이란 뜻으로 나온다.

Java에서의 오버라이딩은 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 말한다. 즉, 상속받은 조상의 메서드와 같은 메서드이지만 내용을 변경하여 자신이 현재 사용하고 있는 내용을 최우선시 하기 때문에 오버라이딩이란 명칭이 붙여진 것 같다.

 

오버라이딩의 조건

· 조상 클래스의 메서드와 이름이 같아야 한다.

· 조상 클래스의 메서드와 매개변수가 같아야 한다.

· 조상 클래스의 메서드와 리턴 타입이 같아야 한다.

· 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

· 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

· 인스턴스 메서드를 static 메서드로 또는 static 메서드를 인스턴스 메서드로 변경할 수 없다.

 

 

그렇다면 오버로딩과 오버라이딩의 내용을 한마디로 요약하면

· 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것.

· 오버라이딩 : 상속 받은 메서드의 내용을 변경하는 것.

 

 

 

 

'프로그래밍 > Java' 카테고리의 다른 글

다형성(polymorphsim)  (0) 2017.08.21
접근 제어자 (Access Modifier)  (0) 2017.08.19
JVM의 메모리 구조  (0) 2017.08.13
선언 위치에 따른 변수의 종류  (0) 2017.08.12
클래스와 객체와 인스턴스  (0) 2017.08.11

WRITTEN BY
김치치즈스마일
세계정복!

,

JVM은 용도에 따라 여러 영역으로 나누어 메모리를 관리한다.

과연 어떤식으로 관리하는지 알아보자.

 

 

메서드 영역 (Method Area = Class Area = Static Area)

· 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스 파일(*.class)을 읽어서 분석하여 클래스에 대한 정보를 이곳에 저장함. 이 때, 그 클래스의 클래스 변수도 이 영역에 함께 저장.

 

호출 스택 (Call Stack 또는 Execution Stack)

· 메서드의 작업에 필요한 메모리 공간을 제공.

· 메서드가 호출되면, 메서드 수행에 필요한 메모리 공간을 할당, 메서드가 종료되면 사용하던 메모리를 반환하고 스택에서 제거.

· 메서드가 작업을 수행하는 동안 지역 변수(매개 변수 포함)들과 중간 결과 등을 저장함.

· 호출 스택 맨 위에 있는 메서드가 현재 실행 중인 메서드.

 

힙 (Heap)

· 인스턴스가 생성되는 공간.

· new 연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성.

 

 

[참고] 자바의 정석

 

 

 

'프로그래밍 > Java' 카테고리의 다른 글

접근 제어자 (Access Modifier)  (0) 2017.08.19
오버로딩과 오버라이딩  (0) 2017.08.14
선언 위치에 따른 변수의 종류  (0) 2017.08.12
클래스와 객체와 인스턴스  (0) 2017.08.11
변수 타입에 따른 기본값  (0) 2017.08.05

WRITTEN BY
김치치즈스마일
세계정복!

,

변수는 멤버 변수(클래스 변수, 인스턴스 변수), 지역 변수로 나뉜다.

이렇게 변수의 종류를 결정하는 중요한 요소는 변수의 선언된 위치이다.

변수의 선언된 위치에 따라 종류를 알아보자.

 

 

 

변수의 종류 

선언 위치 

생성 시기 

 클래스 변수

(class variable)

클래스 영역 

클래스가 메모리에 올라갈 때 

 인스턴스 변수

(instance variable)

 인스턴스가 생성되었을 때

 지역 변수

(local variable)

 클래스 영역 이외의 영역

(메서드, 생성자, 초기화 블럭 내부)

 변수 선언문이 수행되었을 때

 

인스턴스 변수

· 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어짐.

· 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있음.

· 인스턴스마다 고유한 상태를 유지해야하는 경우 인스턴스 변수로 선언.

 

클래스 변수

· 선언 방법은 인스턴스 변수 앞에 static을 붙여주면 됨.

· 인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있음.

  ex) 클래스이름.클래스변수

· 클래스가 로딩될 때 생서오디어 프로그램이 종료될 때까지 유지.

· 모든 인스턴스가 공통된 저장공간(변수)을 공유함. 그래서 공유 변수(Shared variable)라고도 함.

· 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야할 경우 클래스 변수로 선언해야 함. 

 

지역 변수

· 메서드 내에 선언되어 메서드 내에서만 사용가능.

· 메서드가 종료되면 소멸 됨.

· for문, while문의 블럭({ }) 내에 선언된 지역 변수는 블럭 내에서만 사용 가능하며, 블럭을 벗어나면 소멸됨.

· 반드시 초기화 하고 사용.

 

 

[참고] 자바의 정석

'프로그래밍 > Java' 카테고리의 다른 글

오버로딩과 오버라이딩  (0) 2017.08.14
JVM의 메모리 구조  (0) 2017.08.13
클래스와 객체와 인스턴스  (0) 2017.08.11
변수 타입에 따른 기본값  (0) 2017.08.05
객체 지향 프로그래밍이란?  (0) 2017.06.04

WRITTEN BY
김치치즈스마일
세계정복!

,

클래스와 객체의 정의와 용도는 어떤 것일까?

 

클래스

· 정의 : 클래스란 객체를 정의해 놓은 것.

· 용도 : 클래스는 객체를 생성하는데 사용.

 

객체

· 정의 : 실제로 존재하는 것, 사물 또는 개념.

· 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름.

 

프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻함.

쉽게 설명하자면 클래스는 제품의 설계도이고 객체는 설계도를 사용해 만든 제품이라고 볼 수 있다.

 

인스턴스

· 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 함.

· 클래스로부터 객체를 만드는 과정을 인스턴스화 라고 함.

· 객체는 모든 인스턴스를 대표하는 포괄적인 의미.

· 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미.

 

하지만 객체와 인스턴스는 같은 의미를 가지고 있으므로 엄격하게 구분할 필요는 없지만 문맥상의 차이는 있음.

 

[참고] 자바의 정석

'프로그래밍 > Java' 카테고리의 다른 글

오버로딩과 오버라이딩  (0) 2017.08.14
JVM의 메모리 구조  (0) 2017.08.13
선언 위치에 따른 변수의 종류  (0) 2017.08.12
변수 타입에 따른 기본값  (0) 2017.08.05
객체 지향 프로그래밍이란?  (0) 2017.06.04

WRITTEN BY
김치치즈스마일
세계정복!

,

자바에서 변수를 선언할 경우 초기화를 해줘야 한다.

하지만 초기화를 하지 않더라도 변수의 타입별기본값이 있다.

과연 기본값은 어떤 것들이 있는지 알아보자.

 

자료형 

기본값 

boolean 

 false

 char

 '\u0000'

 byte

 0

 short

 0

 int

 0

 long

 0L

 float

 0.0f

 double

 0.0d or 0.0

 참조형 변수

 null

 

[참고] 자바의 정석

 

 

'프로그래밍 > Java' 카테고리의 다른 글

오버로딩과 오버라이딩  (0) 2017.08.14
JVM의 메모리 구조  (0) 2017.08.13
선언 위치에 따른 변수의 종류  (0) 2017.08.12
클래스와 객체와 인스턴스  (0) 2017.08.11
객체 지향 프로그래밍이란?  (0) 2017.06.04

WRITTEN BY
김치치즈스마일
세계정복!

,

객체 지향 프로그래밍이란?

· Object-Oriented Programming (OOP) 이라고 부른다.

· 현실 세계에 있는 것 중에서 프로그래밍 가능한 자원들을 모아서 프로그램화 한 것.

· 미술의 콜라주와 비슷.

 

객체 지향 프로그래밍의 특징

· 코드의 재사용성이 높다.

  - 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

· 코드의 관리가 용이하다.

  - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

· 신뢰성이 높은 프로그래밍을 가능하게 한다.

  - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

 

 

[참고] 자바의 정석

'프로그래밍 > Java' 카테고리의 다른 글

오버로딩과 오버라이딩  (0) 2017.08.14
JVM의 메모리 구조  (0) 2017.08.13
선언 위치에 따른 변수의 종류  (0) 2017.08.12
클래스와 객체와 인스턴스  (0) 2017.08.11
변수 타입에 따른 기본값  (0) 2017.08.05

WRITTEN BY
김치치즈스마일
세계정복!

,