<Auto-Boxing, Auto-UnBoxing>

자료형이 int, boolean, byte, char 등... 이런 자료형을 갖는 변수들은 모두 스택영역에 저장된다. 일반 변수가 저장되고, 객체, 클래스들은 힙영역에 저장된다.

이렇게 별개로 구분하여 사용하는 이유는 메모리의 활용 때문인데, 이런 영역을 넘나들게 하는

Auto-Boxing와 Auto-UnBoxing이 있다.

실습을 통해 알아보자.

 

<실습>



-결과-




LIST

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

Java - Upcast, Downcast  (0) 2015.12.06
Java - String 클래스  (0) 2015.12.06
Java - Runtime 클래스  (0) 2015.12.06
Java - private 제어자  (0) 2015.12.06
Java - 생성자, 초기화블럭  (0) 2015.12.06

<Runtime 클래스>

java.lang 패키지의 Runtime 클래스는 자바에서 외부 프로세스를 생성하는 방법을 제공한다.
Runtime 클래스는 프로그램과 운영체제간의 상호 작용을 위한 메서드들이 정의되어있다.

프로그램이 실행이 되면 이미 Runtime클래스의 객체를 생성해서 거지고 있으며 이 객체의 주소 값을 얻어와서 사용하면 된다.

 

Runtime 클래스의 메소드들을 실습을 통해 알아보도록 하자.

<실습>




-결과-





LIST

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

Java - String 클래스  (0) 2015.12.06
Java - Auto-Boxing, Auto-UnBoxing  (0) 2015.12.06
Java - private 제어자  (0) 2015.12.06
Java - 생성자, 초기화블럭  (0) 2015.12.06
Java - 메소드 오버로딩(Method Overloading)  (0) 2015.12.06

private은 자바에서 변수를 다른 클래스로부터 보호할 때 사용한다.

private으로 변수를 지정해놓으면 다른 클래스는 해당 클래스의 private이 설정된 변수에는 직접 접근이 불가능하다. 그러므로 보안이 높아지는 장점이있다. 그렇다면 어떻게 접근해야할까?

변수를 직접 건드리는 것이 아니고, 함수를 사용해 간접적으로 접근해서 저장하거나 출력하는 것이다.

 

<실습>


-결과-




LIST

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

Java - Auto-Boxing, Auto-UnBoxing  (0) 2015.12.06
Java - Runtime 클래스  (0) 2015.12.06
Java - 생성자, 초기화블럭  (0) 2015.12.06
Java - 메소드 오버로딩(Method Overloading)  (0) 2015.12.06
Java - JVM의 메모리구조  (0) 2015.12.06

<생성자>

생성자는 인스턴스(객체)가 생성될 때 호출되는 인스턴스를 초기화하는 메소드이다. 인스턴스 변수의 초기화에 주로 사용된다.

생성자도 클래스 내에 선언되고 구조도 메소드와 유사하지만 return값이 없다는 점이 다르다. 그런데 생성자 앞에 return값이 없다는 것을 의미하는 void를 사용하지도 않는다. 이것이 메소드와 다른 부분이다.

 

생성자의 조건

1. 생성자는 return값이 없다. (void를 써주는 것도 아님)

2. 생성자의 이름은 클래스의 이름과 같아야 한다.

 

Abc a = new Abc();

이런 구문이 있다고 가정하자.

연산자 new에 의해서 메모리에 (heap에) Abc클래스의 인스턴스가 생성된다. 생성자 Abc()가 호출되어 수행된다. 연산자 new의 결과로 생성된 Abc인스턴스의 주소가 반환되어 참조변수 a에 저장되는 것이다.

지금까지 우리가 객체를 만들때 사용했던 클래스이름()이 바로 생성자였다.

 

생성자에는 기본 생성자와 매개변수가 있는 생성자가 있고, 이들도 함수 오버로딩처럼 동작한다.

 

<실습 - 1>



-결과-



<실습 - 2>
이번에는 생성자를 오버로딩한 것을 알아보자.
생성자를 오버로딩 한 후, 다시 기본 생성자로 객체를 생성하고 싶다면, 무조건 기본생성자를 만들어 줘야한다!



<실습 - 3>



-결과-



<초기화 블럭>
초기화 블럭에는 클래스 초기화 블럭과, 인스턴스 초기화 블럭이 있다.
클래스 초기화 블럭은 클래스 변수의 초기화에 사용되고, 인스턴트 초기화 블럭은 인스턴스 변수의 초기화에 사용된다.
 
클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다.
 
<실습>
생성되는 순서를 잘 알아보자.


-결과-


LIST

<메소드 오버로딩(Method Overloading)>

메소드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별되어야 한다. 자바에서는 한 클래스내에 같은 이름의 메소드가 존재하더라고 매개변수의 개수나 타입이 다르면 다른 것으로 인정되어 코딩이 가능하다. 즉, 한 클래스 내에 같은 이름의 메소드를 여러개 정의하는 것을 메소드 오버로딩이라고 한다.

 

오버로딩의 조건에 대해서 알아보자.

1. 매개변수의 개수나 타입이 달라야한다.

2. 매개변수는 같고 return 타입이 다른 경우는 오버로딩이 될 수 없다. 즉, 리턴타입은 상관 없다는 것

3. 메소드 이름이 같아야 한다.

 

<실습>




-결과-


LIST

<JVM의 메모리구조>

1. 메서드 영역

어떤 클래스가 사용되면 JVM은 해당 클래스의 *.class파일을 읽어서 클래스에 대한 정보를 메서드 영역에 저장한다. 즉, 클래스의 변수인 클래스변수와 클래스 메소드(클래스 데이터) 등이 저장되는 곳이다.

 

2. Stack 영역

주로 메소드의 작업에 필요한 메모리 공간을 제공한다. 메소드가 사용되면 메소드를 위한 메모리가 할당되며 메소드가 실행하는데 필요한 지역변수 혹은 연산의 결과들을 저장하는데 사용되는 공간이다.

메소드가 작업을 마치면 스택 영역에서 소멸된다.

 

3. 힙 영역

인스턴스가 생성되는 공간이다. 즉, 객체가 생성되는 공간이다. 예를 들어 Class Abc가 있다고 가정하자.

그럼 이 클래스에 대한 객체를 Abc a = new Abc(); 이렇게 만들고 주소를 a에 저장했다고 가정하자.

Abc라는 클래스에는 여러가지 멤버변수들이 존재할 것이다. 이때 만들어진 객체를 저장하는 곳이 힙 영역이다. 인스턴스 변수들이 저장되는 공간이다.

 

<실습>




-결과-





LIST

1. 인스턴스 변수 

클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 이 변수도 만들어 진다. 인스턴스(객체)가 존재 해야지만 인스턴스 변수도 존재하는 것이다. 객체도 없는데 인스턴스 변수는 존재할 수 없다.

 

2. 클래스 변수

클래스 변수는 인스턴스 변수 앞에 static 만 붙이면 된다. 선언하는 곳은 클래스 영역이며, 클래스 변수는 모든 인스턴스가 공통된 저장공간을 공유하게 된다. C언어의 전역변수와 비슷하다.

여기서 인스턴스 변수와의 차이점은 한 가지 더있는데 생성되는 위치이다. 인스턴스 변수는 인스턴스를 생성한 후에야 사용가능하지만, 클래스 변수는 인스턴스가 없어도 사용 가능하다. 즉, 클래스가 메모리상에 로딩되면 클래스 변수가 생성되는 것이다.

접근 하는 법은 클래스이름 . 클래스변수로 하면된다.

 

3. 지역 변수

메서드 내에 선언되어 생성과 소멸이 메서드 내에서 이루어지는 변수이다. 중괄호가 쓰이는 곳, 예를들어 for문, if문 등 블록 내에서 선언된 지역변수는 중괄호를 벗어나게 되면 소멸된다.

이렇듯 지역 변수는 해당하는 블럭을 벗어나면 소멸되어 사용할 수 없게 된다.

 

<실습>

static이 붙은 클래스 변수에 대해서 실습해보자.



-결과-






LIST

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

Java - 메소드 오버로딩(Method Overloading)  (0) 2015.12.06
Java - JVM의 메모리구조  (0) 2015.12.06
Java - 객체 지향 언어의 정의, 용어  (0) 2015.12.06
Java - while문, do~while문  (0) 2015.12.06
Java - for문  (0) 2015.12.06

<객체지향언어란?>

“실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다” 라는 것이다. 이 개념을 컴퓨터로 그대로 옮겨놓아 언어로 만들어 낸것이 객체지향언어이다. 객체지향언어와 다른 개념으로 C언어와 같은 절차지향언어가 있다. 절차지향이란 프로그램을 시작하면 위에서부터 차례대로 수행하게 된다.

프로그램 진행 중에는 다른 자료형을 선언할 수 없기 때문에 구조체나 자료형들이 모두 미리 정의가 되어 있어야 한다.

말 그대로 절차지향언어는 명령들의 나열이라고 볼 수 있다.

절차지향언어와 객체지향언어의 가장 큰 차이점으로는 클래스와 객체가 있느냐 없느냐의 차이이다.

 

<클래스란?>

객체를 정의해 놓은 것이다. 클래스의 용도는 객체를 생성하는데 사용되는 것이다.

 

<객체란?>

클래스에 정의된 내용대로 메모리에 생성된 것을 말한다. (실제로 존재하는 것, 사물 또는 개념) 객체의 용도는 객체가 가지고 있는 기능과 속성에 따라 달라진다.

 

우리 실생활에 비춰 예를 들어보자.

에어컨설계도(클래스)는 에어컨이라는 제품(객체)을 정의한것이며, 에어컨(객체)를 만드는데 사용된다. 에어컨설계도(클래스)는 단지 에어컨(객체)을 생성하는데 사용될 뿐, 에어컨(객체) 그 자체는 아니다. 여기서 우리가 필요한 것은 무엇인가? 에어컨을 사용하기 위해서는 에어컨 설계도(클래스)가 필요한 것이 아니다. 에어컨(객체)이 필요한 것이다.

 

다시 프로그래밍으로 넘어와 프로그래밍에서는 먼저 클래스를 작성한 다음, 클래스로부터 객체를 생성하여 사용한다.

그렇다면 클래스를 왜 정의해 놓을까? 한 번 설계도를 생성해 놓으면 그 다음 제품(객체) 만드는 일은 아주 쉽고 수월하기 때문이다. 그래서 클래스를 따로 정의해 놓는 것이다.

 

JDK는 프로그래밍을 위해 많은 수의 클래스를 기본적으로 지원하고 있다. 우리는 아주 잘 만들어진 클래스들을 객체를 만들어 사용하기만 하면된다.

 

<객체와 인스턴스?>

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

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

인스턴스와 객체는 근본적으로는 같지만 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있고, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 갖는다. (객체 == 인스턴스 라고 생각해도 무방!)

 

<속성과 기능?>

속성은 멤버변수, 특성, 필드, 상태를 말하고, 기능은 메서드, 함수 등을 말한다.

class TV {

 // TV의 속성 (멤버변수)

 String color;

 boolean power;

 int channel;

 

 // TV의 기능 (메서드)

 void power() {power =! power;}

 void channelUp() {++channel;}

 void channelDown() {--channel;}

<객체의 생성과 사용>

기본 문법)

클래스명 변수명;   // 클래스의 객체를 참조하기 위한 참조변수 선언

변수명 = new 클래스명(); // 클래스의 객체 생성 후, 객체의 주소를 참조변수에 저장.

TV t;   // t라는 참조변수 선언

t = new TV();  // new TV() : 객체생성, 객체의 주소를 t에 저장


LIST

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

Java - JVM의 메모리구조  (0) 2015.12.06
Java - 인스턴스 변수, 클래스 변수, 지역 변수  (0) 2015.12.06
Java - while문, do~while문  (0) 2015.12.06
Java - for문  (0) 2015.12.06
Java - 2차원 배열  (0) 2015.12.06

<while문>

반복문 중에 하나로 for문과는 문법이 다르다. 

문법) 

while(조건식)

{  // while문 시작

   반복할 내용

}  // whilw문 끝

조건식이 참일 경우 반복할 내용을 1번 수행 후, 또 조건식이 참이면 계속 반복할 내용 수행... 

 

<실습> 

1~9까지의 합을 출력하면서 나타내보자.




-결과-



<do~while문>

do~while문은 while문과 거의 흡사하지만 처음 한번 수행한다는 차이점이 있다. 

반복할 내용을 무조건 한 번 수행한 후, 조건식에 의해 그 다음 반복할 내용이 수행되는지 마는지 결정된다.

문법)

do

{

   반복할 내용

} while(조건식);

해석 : 처음 "반복할 내용"을  한 번 수행한다. 그 후, 조건식에 의해 그 뒤로 계속 수행할 것인지 결정한다. 

 

<실습>  



-결과-


LIST

<for 문>

 for문은 반복문 중에 하나로 while, do~while, for중에 for가 가장 많이 사용된다.

기본 문법)

for(초깃값; 조건값; 증감값)

{

   반복할 내용

}

"조건값이 참인 동안 반복할 내용을 반복적으로 수행해라"라는 의미이다.

 
<실습>
for문 이용해 단을 입력받아 구구단을 출력해보자.


-결과-



<다중 for문>
다중 for문은 말 그대로 for문 안에 또 for문을 사용하는 것이다.
for문이 겹쳐져서 여러개 사용되면 혼동이 쉬우므로 잘 알아두길 바란다.
 
<실습>
2~9단까지 출력하는 프로그램을 짜보자.


-결과-




LIST

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

Java - 객체 지향 언어의 정의, 용어  (0) 2015.12.06
Java - while문, do~while문  (0) 2015.12.06
Java - 2차원 배열  (0) 2015.12.06
Java - Scanner, BufferedReader의 차이점과 개념  (0) 2015.12.05
Java - 배열  (0) 2015.12.05

+ Recent posts