Java 클래스 객체 사용 연습하기


[조건]

> 클래스 내부에 생존 여부를 가지는 속성 포함

> 이름과 나이를 포함하는 속성 포함

> 이름 정보를 변경하는 기능 포함

> 이름 정보를 반환하는 기능 포함

> 생존여부를 반환하는 기능 포함


> Animal 클래스를 이용하는 테스트 클래스 작성

> Animal 클래스를 이용하여 나이가 3살, 이름이 "큰뿔소"이며 살아있는 객체를 생성

> 생성한 객체의 이름과 생존 여부 출력

> "큰뿔소" 객체의 이름을 "펭귄"으로 변경한 후 이름과 생존 여부 출력


Animal 클래스


{필드}

> live : boolean 타입

> age : int 타입

> name : String 타입

{메소드}

> setName(), getname(), getLive()


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Animal {
    boolean live;
    int age;
    String name;
 
    void Animal(String name) { // 객체로 이름을 받아서 사용
        this.name = name;
        this.age = 22;
        this.live = true;
 
        System.out.println(name);
        System.out.println(age);
        getLive();
        System.out.println();
    }
 
    void setName(String name) {
        this.name = name;
    } // 이름 정보 변경
 
    String getName() {
        return name;
    } // 이름 정보 반환
 
    void getLive() {
        if (live == true) {
            System.out.println("살았다");
        } else
            System.out.println("죽었다");
    } // 생존 여부 반환
}
 
public class AnimalTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        Animal animal = new Animal();
        animal.Animal("큰뿔소");
        animal.Animal("펭귄");
    }
}


[결과]


'2017 > JAVA' 카테고리의 다른 글

주사위 놀이(java.util.Random)  (0) 2017.07.04
기말대비정리  (0) 2017.06.01
INTRO  (0) 2017.03.04

주사위를 던져서 나오는 값을 출력하는 프로그램을 작성하기

- 클래스를 두개 사용하기(클래스 생성&사용 연습)


[조건]

> 주사위를 표현하는 클래스 작성

> 주사위를 던져서 나오는 눈의 값을 반환후 출력

> 주사위가 나오는 값은 무작위 (Java.util.Random사용)

> 이전값과 동일한 값이 나올경우 종료


[무작위값 출력하는 방법]

java.util.Random random = new java.util.Random(); //ra

val = random.nextInt(6); // val값 : 0~5

val += 1; // val값 : 1~6



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Die {
 
    int value;
 
    int roll() {
        java.util.Random random = new java.util.Random();
        value = random.nextInt(6);
        value += 1;
 
        return value;
    } // Random한 주사위 값을 반환하는 roll메소드
}
 
public class MyDie {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        Die die = new Die(); // 주사위 클래스 객체 생성
 
        int one = 0// 주사위를 던진 값
 
        while (true) {
            int two = die.roll(); // 그 다음 주사위를 던진 값
            System.out.println(one + " // " + two);
            one = two;
            two = die.roll();
            System.out.println(one + " // " + two);
 
            if (one == two) // 이전에 던진 주사위값과 새로 던진 주사위의 값이 같으면 종료
                break;
        }
    }
}




결과


'2017 > JAVA' 카테고리의 다른 글

Class 이용연습 (Animal Class)  (0) 2017.07.04
기말대비정리  (0) 2017.06.01
INTRO  (0) 2017.03.04

자바의 기본 골격 - 클래스를 잘 만들자.


class MyClass {   // 클래스 이름 


int value;    // 멤버 필드


MyClass {...}        // 생성자

MyClass(int v){...}


void my_func{....}  // 메소드

void my_func(int x){...}


public static void main(String args[]){ // 메인 메소드


}


++++++추가 적으로

static field/method, 상속, 인터페이스, 접근지정자, 패키지



식별자 에 대한 룰

> 이름을 어떻게 정의해야 하는가 

> 자바 키워드 이해하기


자바의 데이터 타입

> 기본타입 8개

  boolean 1

  char 2

  byte 1

  short 2

  int 4

  long 8 

  float 4  -> f,d붙는 것.

  double 8

> 레퍼런스 타입 3개: 객체가 가르키는 주소의 값


상수

> final 키워드를 사용한다.

> class, Method 


타입 변환

> Typed language : 각 변수가 가지는 값들, 타입에 대해 민감한 언어. int에는 int 값만 들어가야한다.

> 더 큰 타입에 작은 타입을 넣을 경우에는 자동 타입변환이 일어 난다. .

> 강제 타입변환시에는 강제적으로 타입을 바꿔줘야한다.


Scanner 사용하는 법.


연산자 우선순위 알아두고, 잘 모르겠다 하면 괄호를 사용하자.

비트연산자 시프트 연산자 그냥 알아보기

조건연산자 등등...조건문, 다중조건문, 스위치문, case문,반복문


배열

> 자바 배열은 선언하는 과정, 생성하는 과정 총 두가지 과정을 꼭 거쳐야한다.

> int intArray[] = {0,1,2,3}

> int intArray[] = new int[]

> Array of points

> 자바 배열은 비정방형 배열이다.

>> int x[5][4]

>> array of pointer

>> 각 행과 열의 개수가 다를 수 있다. 


자바의 예외 처리(Exception)

tr{

//예외 가능성

}

catch (처리할 예외처리){

}

final {

}

> flow 알아두기


클래스 구조

> 객체

> 메소드 형식

> 메소드 오버로딩 (같은 기능 메소드 바꿔서 


this

> this.x 자기자신 >super.x 부모클래스

> this(..)     > super(...) 생성자

> 생성자를 호출할때 가장 처음으로 선언을 해줘야한다.


생성자 룰

> 생성자 선언이 안되어있을 때 자동으로 생성자를 만들어준다. (기본생성자를)


접근 지정자

> 누가 접근을 지정하고 할 수 있을지

> 아무것도 없다.(default)-> 패키지 안에서만 or public -> 패키지 상관없이

> default, private, public, protected(default+상속클래스)


static VS non-static

static F static M

non F non M


S,F S,M <- non N


객체가 만들어지지 않아도 사용 가능하다. 

non 객체 static은 클래스와 연관이 있다고 생각하면 된다. 

차이점에 대해 ppt참고하기


상속

> sub 생성자

>> 부모클래스 생성자(생략가능)

>> 초기화

>> (타입변환) >> 메소드 오버라이딩 


A obj = new A();

A obj = new B();


호출이 가능한지 부모 자식 클래스 내부의 필드사용하는거

실제 호출? 가리키는 객체 부모자식 필드에서 객체생성사용하면 자식으로 간다


인터페이스



패키지

ppt에 있는 사용법


스트림에서 가장 중요한거 7-10 예제 파이프 라이닝    


제너럴 코딩한번씩 해보기

Vector 제네릭 메소드 정의














'2017 > JAVA' 카테고리의 다른 글

Class 이용연습 (Animal Class)  (0) 2017.07.04
주사위 놀이(java.util.Random)  (0) 2017.07.04
INTRO  (0) 2017.03.04

트리: 계층적인 구조를 나타내는 자료구조 (부모-자식)관계






용어:

> 노드 : 트리의 구성요소 (A ~ J)

> 루트 : 부모가 없는 노드 (A)

> 서브트리 : 하나의 노드와 그 노드들의 자손들로 이루어진 트리 (B,E,F,G) (C,H) (D,I,J)

> 단말노드 : 자식이없는 노드   (E~J)

> 비단말노드 : 적어도 하나의 자신을 가지는 노드 (B,C,D)

> 자식,부모,형제,조상,자손

  조상노드 - 루트노드에서 임의의 노드까지의 경로를 이루고 있는 노드들을 뜻함

  자손노드 - 임의의 노드 하위에 연결된 모드 노드들을 말한다.

> 레벨 : 트리의 각 층의 번호 (루트(A)=1, B,C,D=2, E~J=3)

> 높이 : 트리의 최대 레벨 (3)

> 차수 : 노드가 가지고 있는 자식 노드의 개수 (B=3, C=1, D=2)




이진트리 : 모든 노드가 최대 2개의 서브트리를 가질 수 있는 트리, 각 노드에는 최대 2개까지의 자식 노드가 존재


특성:

> 노드의 개수가 n이면 간선의 개수는 n-1이다.

> 높이가 h이면, 최소 h개의 노드를 가지며, 최대 2^h-1개의 노드를 가진다.

> 노드의 개수가 n개이면 이진트리의 높이는 최대n이거나 최소 log2(n+1)이 된다.


표현:

> 배열로 구현 : 포화이진트리로 가정하고 각 노드에 번호를 붙여 배열의 인덱스에 저장

> 연결리스트로 구현 : 포인터를 이용해 부모노드가 자식노드를 가리키게 한다.



순회:




전위순회 (preorder) -> 자손보다 루트노드를 먼저 방문한다.

<부모노드 처리후 자식노드를 처리해야 하는 경우>



> 중위순회 (inorder) -> 왼쪽 자손, 루트 , 오른쪽 자손 순으로 방문한다.



> 후위순회 (postorder) -> 루트보다 자손을 먼저 방문한다.

<자식노드 처리후 부모노드를 처리해야 하는 경우>




노드개수, 높이 구하기


> 노드개수 구하기 : 루트(1) + 왼쪽(순환) + 오른쪽(순환)

> 높이 구하기 : 루트(1) + MAX(왼쪽(순환) VS 오른쪽(순환))




수식트리 : 후위순회를 사용, 서브트리의 값을 순환호출로 계산  





스레드 이진 트리: NULL링크에 중위 순회시에 후속 노드인 중위 후속자(inorder successor)를 저장시켜 놓은 트리




이진 탐색 트리: 탐색,삽입,삭제





Nachos


운영체제의 시스템이 구동되는것을 알아보기 위해서 교육용 OS인 Nachos라는 프로그램을 사용하게되는데 C와 Java등 여러가지 언어를 지원하고 있어 편하게 이용할 수 있다. 


이 Nachos를 Java로 구동시키는데 Cygwin을 사용해 구동해 보려고 한다. 




1. Nachos를 다운 받기전에 Cygwin을 다운받는다. https://www.cygwin.com 

(자신의 운영체제에 따라 32비트 or 64비트를 다운받아야한다. 32비트는 setup-x86.exe // 64비트는 setup-x86_64.exe)



2. 다운받은 Cygwin설치 프로그램을 실행하여 진행하는데 설정같은거 건드리지말고 기본 설정으로 진행을 한다. 

(다음 다음 다음 다음 다음 다음...)


3. 넘어가는 중간에 아래와 같이 다운로드 사이트를 선택하는 화면이 나올텐데 여기서 필자는 그나마 아는 ftp서버인 daum으로 설정하고 진행했다.

(http://ftp.daum.net 선택 후 진행) 여기서 선택하는 건 앞으로 설치할 패키지프로그램(?)을 다운받는 위치인 것 같다.





4. 다음 버튼을 눌러 진행하게 되면 아래와 같은 화면이 나올것이다. 

여기서 우리는 Search에 make를 입력하고 (make 입력하고 enter등 버튼 클릭안해도 자동으로 Search가 된다. 기다려라) 아래 사진 처럼 Devel 안에 make: The GNU version of the 'make' utility 를 찾고 skip이라고 써있는 걸 누르면 아래 사진과 같이 바뀌게 될 것이다.




5. 4번을 실행하고 나면 다음으로 넘어가지 말고 gcc라는 키워드를 다시 Search하여 4번과 같은 방법으로  아래의 사진과 같이 만들어준다.

(Devel안에 gcc-core:GNU Compiler Collection (C,OpenMP) 을 찾아 Skip을 누르면 아래 사진과 같이 바뀌게 될 것이다.)




6. 이렇게 진행 하고 나면 이제 Nachos를 다운받아준다. ( Nachos다운 )

7. 다운받은 Nachos 압축 파일을 cygwin home 폴더 안 user이름(각자 자신의 컴퓨터마다 다를것이다.) 폴더에 넣어준다.

(필자의 경우 기본적으로 설치를 진행하여 C드라이브 최상위 폴더 cygwin64에 home 디렉토리에 user이름(ConvergenceSecurity) 폴더안에 넣어주었다.  아래 사진은 home디렉토리를 나타내는 사진이다.)




8. 자, 이제 기본 구성은 다 끝났다 Cygwin을 실행시켜보자!!


9. 실행을 시키고 나서 nachos압축 파일을 압축 해제한다. (압축 해제하는 명령어 : tar -zxvf 압축파일명(nachos-java.tar.gz))



10. 9번까지 실행하고 나면 아래 사진과 같이 nachos압축파일을 넣었던 폴더에 압축이 해제되어 nachos 폴더가 생성되어있을 것이다.




11. 거의 다왔다. 우리는 Java 코드를 사용할 것이기 때문에 Java의 환경변수를 알려주어야한다.  

따라서 위사진에서 볼 수 있듯이 .bash_profile을 편집기로 실행하여 (메모장으로는 편집이 되지 않는다. notepad++ 이나 atom 등 편집기로 편집을 해 주어야한다. ) 맨 아랫줄에 Java JDK의 위치를 추가하고 저장한다. 

필자의 경우 JDK의 주소는 C:\Program Files\Java\jdk1.8.0_111\bin 이기 때문에 아래 사진과 같이 선언을 해주었다. 편집기는 atom을 사용.

(export PATH=$PATH:"C:\Program Files\Java\jdk1.8.0_111\bin")




12. 이제 다 끝났다. cygwin에서 javac를 쳐본다.  아래 사진과 같이 옵션의 정보가 뜬다면 성공!!! 

그렇지 않고 에러메세지가 뜬다면 Java JDK의 경로 설정을 잘 해주었는지 다시한번 확인해보고 cygwin도 껐다가 다시 켜보기도 해보아라.


13. 이제 실행을 시켜 볼 것이다. nachos/proj1폴더로 이동해서 실행해 보겠다.

cd 명령어를 통해 nachos/proj1 폴더로 이동해주고, make 명령어를 통해 컴파일을 한다. 

( nachos안의 소스코드를 수정하였을 경우 cgywin에서 실행할때 make명령어를 실행해 수정된 소스코드를 다시 컴파일 시키고 실행시켜야 수정된 소스코드가 반영된다. )

그리고 ../bin/nachos 를 입력하여 nachos를 실행시켜본다.

아래 사진처럼 잘 작동되면 성공!!!!!!!!  축하합니다!!!

 















프로그래밍 언어

>기계어 (0,1)

>어셈블리어 (니모닉 기호(mnemonic symbol))

> 고급언어 (C,JAVA) (절차 지향 언어, 객체 지향 언어)


JAVA <플랫폼 독립성이다>

> 제임스 고슬링 (James Gosling)

> 플랫폼 호환성 문제 해결 : C언어같이 플랫폼이 종속되어 있었는데 자바의 JVM(자바가상머신)을 통해 WORA(Write Once Run Anywhere) 실현

단, JAVA언어는 플랫폼 종속적인것이 아니지만 JVM은 플랫폼 종속적이다. 

WORA를 가능하게 하기 위한 특징은 아래와 같다.

> 바이트 코드 (Byte Code)

> JVM (Java Virtual Machine)


바이트 코드

> 플랫폼 종속성이 없이 자바 가상 기계인 JVM에 동작하는 바이너리 코드

> 클래스 파일에 저장

> 컴퓨터 CPU에 의해 직접 실행되지 않는다. (JVM이 인터프리터 방식으로 바이트 코드 해석, 해당 플랫폼에서 실행시킴)


자바 가상 기계

> 각기 다른 플랫폼에서 동일한 자바 실행 환경 제공

> 자바 가상 기계는 플랫폼에 종속적이다.

> 자바 가상 기계가 class(클래스) 파일을 실행한다.


JAVA의 특성

> 객체지향 (클래스 계층구조, 상속성, 다형성, 캡슐화)

> 멀티스레드 

> 소스(.java) 와 클래스(.class) 파일

클래스 파일에는 단 하나 만의 클래스만 존재.

하나의 소스파일에 여러 클래스를 작성 가능 (단, public 클래스는 하나만 가능하다.)

소스 파일의 이름과 public 으로 선언된 클래스 이름은 같아야 한다.






  



'2017 > JAVA' 카테고리의 다른 글

Class 이용연습 (Animal Class)  (0) 2017.07.04
주사위 놀이(java.util.Random)  (0) 2017.07.04
기말대비정리  (0) 2017.06.01

+ Recent posts