안녕하세요  
오늘은 객체지향프로그래밍 2번째 를 간단하게 설명 드리겠습니다. 

3-1 JVM 메모리 구조 

1. 메서드 영역 
- 프로그램 실행 중 어떤 클래스가 사용되면 , JVM 은 해당클래스의 클래스파일을 읽어서  
분석하여 클래스에 대한 정보를 이곳에 저장한다.  
이때 , 그 클래스의 클래스 변수도 이영역에 함께생성된다. 


  2  .힙 

- 인스턴스가 생성되는공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 
즉, 인스턴수 들이 생성되는 공간이다. 

3.호출스택 

 - 호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 
 호출스택에 호출된 메서드를 위한 메모리가 할당되며 , 이 메모리는 메서드가 작업을 
 수행하는 동안 지역변수들과 연산 중간결과 등을 저장하는데 사용한다. 
그리고 그 메서드가 작업을 마치면  할당되었던 메모리공간은  
반환되어 비워진다. 


3-1. 기본형 매개변수와 참조형 매개변수 

기본형 매개변수 - 변수값을 읽기만 할 수 있다.(read only) 
참조형 매개변수 - 변수값을 읽고 변경할 수 있다.(read & write) 

4-1. 재귀호출 
 1. 메서드의 내부에서 메서드 자신을 다시 호출하는 것을 '재귀호출' 이라고 하고, 
재귀호출을 하는 메서드를 '재귀 메서드' 라고한다 
~~~~ 
package 삼월이십일일; 

public class FactorialTest { 
public static void main(String args[]) { 
int result = factorial(4); 

System.out.println(result); 

static int factorial(int n){ 
int result =0; 

if(n ==1) { 
result =1; 
}else { 
result = n * factorial(n-1); // 다시 메서드 자신을 호출한다 

return result; 



~~~~ 

~~~~ 
package 삼월이십일일; 

public class FactorialTest2 { 
static long factorial(int n) { 
if(n<=0 || n>20) return -1;  
if(n<=1) return 1; 

return n* factorial(n-1); 


public static void main(String args[]) { 
int n =21; 
long result = 0; 

for(int i =1; i<n; i++){ 
result = factorial(i); 

if(result == -1){ 
System.out.printf("유효하지 않은 값 입니다. +(0<n<=20) :%d%n" ,n); 
break; 

System.out.printf("%2d!=%20d%n",i,result); 



~~~~ 


~~~~ 

package 삼월이십일일; 

public class PowerTest { 
public static void main(String args []) { 
int x= 2; 
int n= 5; 
long result =0; 

for(int i =1; i<=n; i++) { 
result += power(x,i);  

System.out.println(result); 

static long power(int x, int n) { 
if(n==1) return x; 
return x*power(x, n-1); 


//제귀메서드 
~~~~ 
4-1 오버로딩이란 ? 
-한클래스 내에 같은 이름의 메서드를 여러 개 정의하는것을 '메서드 오버로딩'  or '오버로딩' 
 이라고 한다. 

- 오버로딩의 조건? 
1. 메서드 이름이 같아야한다. 
2. 매개변수의 개수 또는 타입이 달라야 한다. 

이상으로 여덞번째 개발일지를 마치겠습니다. 



'Java' 카테고리의 다른 글

10. 열번째 개발 공부  (0) 2018.03.28
9. 아홉번째 개발 공부  (0) 2018.03.28
7. 일곱번째 개발 공부  (0) 2018.03.28
6.여섯번째 개발 공부  (0) 2018.03.28
5. 다섯번째 개발 공부  (0) 2018.03.28

ackage 삼월이십일; 

public class CardTest { 
public static void main(String args[]) { 
System.out.println("Card.width =" + Card.width); 
System.out.println("Card.height=" + Card.height); 

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

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

System.out.println("c1 은 " + c1.kind + "," + c1.number 
+"이며, 크기는 ("+ c1.width +"," +c1.height +")"); 
System.out.println("c2 은 " + c2.kind + "," + c2.number 
+"이며, 크기는 ("+ c2.width +"," +c2.height +")"); 

System.out.println("c1의  width와 height 를 각각 50, 80으로 변경합니다"); 
c1.width = 50; 
c1.height = 80; 

System.out.println("c1 은 " + c1.kind + "," + c1.number 
+"이며, 크기는 ("+ c2.width +"," +c2.height +")"); 
System.out.println("c2 은 " + c2.kind + "," + c2.number 
+"이며, 크기는 ("+ c2.width +"," +c2.height +")"); 





class Card { 
String kind; 
int number; 
static int width = 100; 
static int height = 250; 






package 삼월이십일; 

public class ReferenceParamEx2 { 
public static void main(String args[]) { 

int [] x = {10}; 
System.out.println("main () : x =" + x[0]); 

change(x); 
System.out.println("After change(x)"); 
System.out.println("main() : x ="  + x[0]); 


static void change(int[] x){ 
x[0] = 1000; 
System.out.println("change(): x=" + x[0]); 




'Java' 카테고리의 다른 글

9. 아홉번째 개발 공부  (0) 2018.03.28
8. 여덞번째 개발공부  (0) 2018.03.28
6.여섯번째 개발 공부  (0) 2018.03.28
5. 다섯번째 개발 공부  (0) 2018.03.28
4.네번째 개발 공부  (0) 2018.03.28

안녕하세요  오늘은 객체지향단원에 들어갔는데 ! 이론이 중요한것들이 보여 이론은 핵심만 찝어서 올리도록 하겠습니다 잘부탁드립니다. 

1-1.객체지향언어 의 특징  
1.코드의 재사용성이 높다  
(새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.) 

2.코드의 관리가 용이하다 
(코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.) 

3. 신뢰성이 높은 프로그래밍을 가능하게 한다 
(제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며 , 

코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지 할 수 있다) 
객체지향언어의 가장 큰 장점은 '코드의 재사용성이 높고 유지;보수가 용이하다' 는 것이다. 






1-2.클래스와 객체의 정의와 용도 
클래스란 ?  

(객체를 정의해 놓은것, 또는 클래스는 객체의 설계도 또는 틀이라고 정의할 수 있다. 
클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.) 

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

객체란? 
(실제로 존재하는 것 이다. 우리가 주변에서 볼 수 있는 책상, 의자, 자동차와 같은 사물들이 곧 객체이다 .) 

객체의 정의 - 실제로 존재하는것 ,사물 또는 개념 
객체의 용도 - 객체가 가지고 있는 기능과속성에 따라 다름 





2-1.객체와 인스턴스 
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고하면,  어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스 라고한다. 

예를들면 Tv 클래스로부터 만들어진 객체를 Tv 클래스의 인스턴스 라고 한다. 
 결국 인스턴스는 객체와 같은 의미이지만 ,  

객체는 모든 인스턴스를 대표한느 포괄적인 의미를 갖고 있으며  
인스턴스는 어떤 클래스로부터 만들어진  것인지를 강조하는 보다 구체적인 의미를 갖고 있다. 








2-2 객체의 구성요소 - 속성과 기능 

객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능 갖는다. 즉, 객체는 속성과 기능의 집합이라고 할 수 있다.  
그리고 객체가 가지고 있는 속성과 기능을  그 객체의 맴버 라 한다 

속성 = 맴버변수, 특성, 필드. 상태 
기능 = 메서드. 함수, 행위 


보다 쉽게 이해할 수 있도록  TV 를 예를 들어보면 

속성 - 크기, 길이, 높이 , 생삭 ,불륨 ,채널 등  

기능 - 켜기, 끄기 , 볼륨 높이기 , 볼륨 낮추기, 채널 변경하기 등 



2-3 .인스턴스의 생성과 사용 

Tv 클래스를 선언한 것은 Tv 설계도를 작성한 것에 불과하므로 Tv 인스턴스를 생성해야 제품 을 사용할 수 있다. 
클래스로부터인스턴스를생성하는 방법은 여러가지가 있지만 일반적으로는 다음과 같다. 

클래스명 변수명 //  클래스의 객체를 참조하기 위한 참조변수를 선언 
변수명 = new 클래스면 ();  // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장 
 Tv t;                   // Tv 클래스 타입의 참조변수 t 선언  
 t = new Tv();  // Tv 인스턴스를 생성한 후, 생성된 TV 인스턴스의 주소를 T에 저장 
이상으로 간단하면서  상세한 이론을 마치겠습니다. 




package 삼월십구일; 

class Tv{ 
String color; 
boolean power; 
int channel; 

void power() { power = !power ;} 
void channelUp() { ++channel;} 
void channelDown() { --channel;} 




public class TvTest2 { 
public static void main(String args[]) { 

Tv t1 = new Tv(); 
Tv t2 = new Tv(); 
System.out.println("t1 의 channel 값은 :" + t1.channel + "입니다"); 
System.out.println("t2 의 channel 값은 :" + t2.channel + "입니다"); 

t2 = t1; 
t1.channel = 7; //channel 값을 7로 한다 

System.out.println("t1의  channel 값을 7로 변경하였습니다"); 

System.out.println("t1의 channel의 값은 :"+t1.channel+"입니다"); 
System.out.println("t2의 channel의 값은 :"+t2.channel+"입니다"); 



//위의 예제는 Tv 클래스의 인스턴스 t1과 t2 를 생성후에 , 인스턴스 t1 의 맴버변수인 channel 의 값을 변경하였다.

'Java' 카테고리의 다른 글

8. 여덞번째 개발공부  (0) 2018.03.28
7. 일곱번째 개발 공부  (0) 2018.03.28
5. 다섯번째 개발 공부  (0) 2018.03.28
4.네번째 개발 공부  (0) 2018.03.28
3. 세번째 개발 공부  (0) 2018.03.28

+ Recent posts