'Java > Java review exercises' 카테고리의 다른 글

Java [미로 게임]  (0) 2017.09.21
Java Program [객체지향 설계,부루마블 게임]  (0) 2017.09.19

 

*자료구조

 

- 자료구조란 데이터를 효율적으로 추가,삭제,검색할 수 있도록 구조를 만들어서

  저장해 둔 것

 

- 리스트 : 데이터를 1차원으로 늘어놓은 형태 배열도 1차원 형태로 데이터를 저장하지만

              리스트는 배열과 달리 검색과 추가,삭제가 가능하다.

              데이터를 저장하는 형태에 따라 ArrayList와 연결리스트(Linked List)로 세분하기도 한다.

 

- 스택 : 배낭에 물건을 넣을때 처럼 제일 마지막에 넣은 데이터부터 순서대로 꺼낼 수 있는 구조

 

- 큐 : 매표소에 줄을 서서 기다리는 사람들처럼 들어온 순서대로 데이터를 꺼낼 수 있는 구조 

 

- 해쉬 테이블 : 데이터를 키로 검색하는 것이 가능한 구조

 

- 집합 : 데이터가 중복저장 되지 않게 된 구조 엄연히 말하면 자료구조라 할 수 없다.

 

 

#자료구조 클래스

 

- 자바가 나오기 전까지는 앞에서 말한 자료구조들을 프로그래머들이 직접 구현해서 번거롭고 복잡했다.

  하지만 자바에서는 이러한 자료구조를 구현해 놓은 클래스들이 있다.

 

- 리스트 : ArrayList , LinkedList (Vector)

 

- 스택 : LinkedList (Stack)

 

- 큐 : LinkedList

 

- 해쉬 테이블 : HashMap (HashTable)

- 집합 : HashSet

 

 

 

#ArrayList

 

 

 

 

#LinkedList

 

- 기본적으로 사용하는 방법은 ArrayList와 동일하다. 하지만 내부적으로 일어나는

  현상은 전혀 다르다.

 

- 데이터들은 주소값으로 연결이 되어 있기 때문에 삽입,삭제는 ArrayList보다 효율적이나

  검색이 차례차례 돌아야 하므로 비효율적이다.

 

 

 

- Iterator : 검색의 효율성을 높이기 위해서 이전에 찾은 데이터의 위치를 기억하고 있다가

              다음에 그 위치를 활용하는 방법

 

 

- hasNext : 다음 데이터가 있는지 여부 확인 메소드

 

- next : 다음 데이터를 불러오는 메소드

 

 

 

#Stack & Que

 

- 스택 : 데이터를 넣은 순서와 꺼낸 순서가 밀접하게 연관된 자료구조 맨 마지막에 넣은 데이터가

           가장 먼저 나온다.

 

 

- 큐 : 먼저 넣은 데이터가 가장 먼저 나오는 구조

 

 

- ArrayList와 LinkedList로 스택,큐 구현해보기

 

 

 

 

#HashTable

 

- HashTable은 키(key)와 벨류(Value)로 데이터를 저장한다. 마치 전화번호부를 볼때 ㄱ,ㄴ,ㄷ 과 같은 기준으로

  데이터를 모아두면 나중에 불러오기 편하듯이 위치값이 아닌 특정키를 기준으로 데이터를 분류 저장할때

  사용하면 좋다.

 

- HashTable은 HashMap 클래스를 이용해 간편하게 사용가능하다.

 

 

#선언 및 데이터를 넣는방법

 

- <키의 데이터타입 , 벨류의 데이터타입>으로 선언

 

 

 

 

# Set

 

- 똑같은 값은 중복해서 저장하지 않는다.

 

- A라는 집합{a,b,c} 와 B라는 집합 {c,d} 가 있을때 A U B 합집합은 {a,b,c,d}가 된다.

  중복된 데이터를 허용하지 않음

 

- HashSet이라는 클래스를 이용해 간편하게 사용가능하다.

 

 

# HashSet

 

- 선언 및 데이터를 넣는 방법

 

 

 

- 저장된 값은 가져오는 방법 (Iterator 활용)

 

 

 

 

- HashSet의 데이터 수를 알고싶을 때에는 size 메소드를 사용하면 된다.

 

 

 

 

 

 

#ArrayList를 이용해 HashTable 구현 , HashSet을 이용해 랜덤숫자 뽑기 프로그램 만들어보기

 

 

 

 

 

 

 

 

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

Java [스레드(Thread),멀티 스레드]  (0) 2017.10.03
Java [Canvas,Swing]  (0) 2017.09.30
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14

 

# 플레이어 3명이서 돌아가며 플레이하고 랜덤주사위를 굴려서 앞으로 전진하는 프로그램

  

 

 

 

# 부루마블 게임

 

 

 

'Java > Java review exercises' 카테고리의 다른 글

Java [미로게임 2번키획득,종료버튼,클리어 추가]  (0) 2017.09.26
Java [미로 게임]  (0) 2017.09.21

*예외처리

 

- try , catch , flnally문

 

- try : 예외가 발생할 가능성이 있는 코드의 에러 감지

- catch : 에러 예외처리

- flnally : 에러 발생의 유무없이 반드시 실행한다. 

 

- 구조가 else if문과 같다.

 

 

 

 

 

* 직렬화

 

- 자바 프로그램에서는 모든 입출력 데이터를 스트림 형태로 주고 받는다.

 

- 객체를 파일에 저장할 때도 스트림으로 만드는 작업이 필요하여 이렇게 객체를

  스트림 형태로 만드는 작업을 직렬화라고 하며 스트림으로 부터 다시 객체를 만들어

  내는 작업을 역직렬화라고 한다.

 

- 직렬화가 가능한 클래스는 seializable 인터페이스를 구현하는 클래스이다.

 

- 직접 클래스를 선언할 때는 직렬화 기능 클래스로 만들기 위한 규칙과 방법을 고려해서

  만들어야 한다.

 

 

#GregorianCalendar 객체를 직렬화 해서 파일로 저장하는 코드

 

 

 

#역직렬화

 

- 파일로 저장된 객체를 역직렬화 해서 GregorianCelendar 객체로 불러오는 코드

 

 

 

- 직렬화는 Serializable 인터페이스를 구현해야 가능

 

 

 

#직렬화 규칙

 

- 생성자나 메소드는 직렬화 대상이 되지 않는다.

 

- 객체가 가지고 있는 필드만 직렬화 된다. 단 , static 키워드가 붙거나

  transient 키워드가 붙은 필드들은 직렬화가 되지 않는다.

 

 

 

#attachment 객체를 프로그램 실행 시 아예 오류를 발생시킨다.

 

 

 

#직렬화 이용해서 파일 저장법

 

 

 

 

 

 

 

 

 

# 작성자와 덧글 라벨을 만들고 텍스트로 글자를 입력받아 확인버튼을 누르면

  작성자 이름과 덧글이 저장되는 프로그램 만들기 단 , 프로그램을 종료해도 남겨진 작성자의

  이름과 덧글은 남아있어야한다.

 

 

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

Java [Canvas,Swing]  (0) 2017.09.30
Java [자료구조]  (0) 2017.09.24
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14
Java [GUI 프로그램2]  (0) 2017.09.13

*Object 클래스

- 최상위 클래스로서 자바의 모든 클래스는 Object클래스를 상속하였다.

 

- 암묵적으로 Object클래스를 상속받기때문에 생략

 

- import를 사용하지 않은 주요 클래스들은 Object클래스를 상속받는다.

 

 

#Object 클래스의 주요 메소드

 

- clone : 객체 자신의 복사본을 반환

 

- equals : 객체 자신과 객체 obj가 같은 객체인지 알려준다.

 

- hashCode : 객체 자신의 해시 코드를 반환한다.

 

- toString : 객체 자신의 정보를 문자열로 반환한다.

 

 

#equals 활용

 

 

 

 

# 네스티드 클래스

 

- 클래스나 인터페이스 안에 클래스를 선언하거나 인터페이스를 선언한 형태

 

- 네스티드 클래스에는 정적 네스티드 클래스 , 이너클래스 , 로컬 이너클래스가 있다.

 

- 다른 클래스를 에워싼 클래스를 인클로징 클래스 라고 한다.

 

 

#이너 클래스

 

- 인클로징 타입의 메소드와 같은 수준으로 선언된 네스티드 클래스

 

 

 

- 인클로징 클래스 내에서 이너클래스 사용방법

 

 

 

- 인클로징 클래스 외부에서 이너 클래스 사용방법

 

 

 

 

#정적 네스티드 클래스

 

- 인클로징 타입의 메소드와 같은 수준으로 선언된 static 키워드를 갖는 네스티드 클래스

 

 

 

 

- 인클로징 클래스 외부에서 정적 네스티드 클래스 사용방법

 

 

 

- 정적 네스티드 클래스와 이너 클래스는 인터페이스 안에서도 선언할 수 있다.

 

- 구현한 클래스에서는 마치 본인의 네스티드 클래스 처럼 사용할 수 있다.

 

 

 

#로컬 이너 클래스

 

- 메소드 본체 안에서 선언된 네스티드 클래스

 

- 선언된 메소드 내부에서만 사용할 수 있으며 반드시 사용하는 부분 전에 선언이 되어야 한다.

 

 

 

- 이름 없는 로컬 이너 클래스 사용방법

 

 

 

- 서브 클래스의 객체를 딱 하나만 생성할 필요가 있는 경우에 사용할 수 있다.

 

- 인터페이스도 동일하게 이름이 없이 사용 가능하다.

 

 

 

#네스티드 인터페이스

 

- 정적 네스티드 인터페이스 한 종류만 있다

 

- 사용방법은 인터페이스와 비슷하다.

 

- 모아서 간단히 보기위함

 

 

 

 

#네스티드 클래스 사용방법들

 

 

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

Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14
Java [GUI 프로그램2]  (0) 2017.09.13
Java [GUI 프로그램]  (0) 2017.09.12

* Gregorian Calendar

 

- 현재 운영체제에서 세팅된 시간을 가져온다.

 

- 타임존을 다르게 다르게 설정하여 서로 다른시간대를 가져올수있다.

  (TimeZone 클래스)

 

#캘린더 설정법

 

 

 

 

#TimeZone

 

 

 

#세계 시계만들기

 

- 각 숫자를 입력할 때 마다 서로 다른나라의  시간을 보여주는 프로그램을 만들자

  (최하 5개국의 시간을 보여준다.)

 

 

 

 #Math 클래스

 

- Math클래스는 수학에서 많이 사용되는 여러가지 함수들을 메소드로 제공하는 클래스

 

 

 

 

# Wrapper 클래스

 

- 자바의 데이터타입은 크게 프리미티브 타입과 레퍼런스 타입으로 나누어진다.

 

- 프리미티브 타입 : 수치 , 문자 , 논리값과 같은 간단한 데이터를 표현할 수 있는 타입

- 레퍼런스 타입 : 프리미티브 타입 외에 다른 타입

 

- Wrapper 클래스는 프리미티브 타입의 값을 담는 객체를 생성하는것 즉 프리미티브 타입의

  값을 감싸는 역할(wrap)을 하기 때문에 이런 클래스를 통틀어서 Wrapper Class 라고 부른다.

 

- 하나의 Wrapper 클래스에는 하나의 프리미티브 값을 담을 수 있으며 생성자 파라미터로

  값을 넘겨주어야 한다.

 

- Wrapper 객체가 생성되고 난 다음에 그 객체 안에 있는 값을 바꿀 수는 없다.

 

 

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

Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [GUI 프로그램2]  (0) 2017.09.13
Java [GUI 프로그램]  (0) 2017.09.12

# GridBagLayout

 

- GridLayout을 일반화 한것이다. GridLayout의 경우는 각 격자들의 크기가 일정하기 때문에

  배치되는 컴포넌트들의 크기도 일정할 수 밖에 없다.

 

- GridBagLayout은 한 컴포넌트가 다수개의 격자를 차지할 수 있기 때문에 보다 다양한 형태로 

  만드는것이 가능하다. 

 

#주요 필드 정의

-> int gridX : 컴포넌트가 놓인 열의 위치

-> int girdY : 컴포넌트가 놓인 행의 위치 

-> int gridwidth : 컴포넌트가 차지하는 가로 넓이

-> int gridheight : 컴포넌트가 차지하는 세로 넓이

-> fill : 컴포넌트 확대하는 방법 가로,세로 가로-세로 채우기 방법이 있다.

-> double weightX : 가로 방향 여유 공간 채우는 방법

-> double weightY : 세로 방향 여유 공간 채우는 방법 

 

 

 

#Panel

- 레이아웃에 올릴때 패널을 이용하면 다양한 레이아웃을 편리하게 구성할 수 있다.

 

 

 

 

#Penel 연습 아무거나 입력값을 받으면 나타내기

 

 

 

 

#AWT 이벤트 리스너

 

- Window : WindowAdapter , WindowListener 

 

- Action : AcionListener

 

- Mouse : MouseListener , MouseAdapter

 

- Focus : FocusListener , FocusAdapter

 

- Item : ItemListener

 

- Key : KeyListener , KeyAdapter

 

 

#AWT - WindowEvent

 

 

 

#AWT - 사칙연산이 가능한 계산기 만들어보기

 

 

 

 

 

 

 

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

Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14
Java [GUI 프로그램]  (0) 2017.09.12

*GUI 프로그래밍

- 텍스트 기반 운영체제가 아닌 그래픽을 이용하여 사용자와 프로그램간의

  상호작용을 할 수 있도록 해주는 인터페이스

 

- 이러한 그래픽 프로그래밍을 지원하기 위해 나온것이 AWT

 

#AWT (Abstract Window Toolkit)

- GUI 프로그래밍을 제작하기 위해 자바에서 제공하는 라이브러리를 모아놓은것

 

- 모든 GUI 프로그램에 사용되는 컴포넌트 및 툴킷을 제공하고 있으며 향후에는 JFC와 같은 스윙(swing)

  및 Java2D의 모태가 되는 개념이다.

 

- 운영체제와 응용프로그램 사이에 연결라이브러리

 

- 실행되는 운영체제에 따라 다르게 보이거나 동작방식에 차이가 있을수있다.

   이를 보완하기 위해 개발된것이 JFC (Java Foundation Classes)이다.

 

- Component : 다른 Component를 올릴 수 있는 Container를 포함한 각종 Container위에 올라갈 화면 구성

                    요소들이 포함되어 있다.

 

- Container : 창의 역할로서 한개 이상의 Container 위에 Button,TextField 같은 Component가 올라감으로서

                 화면이 구성된다.

 

- LayoutManager : Container 위에 Component들을 올릴때 자리 배치 방법

 

 

 

#AWT Frame

 

- Window 클래스의 하위 클래스로 일반적인 응용프로그램에서 윈도우를 생성하기 위해

  사용되는 클래스 다른 윈도우에 속해있지않은 윈도우로 최상위 레벨 윈도우라 한다.

 

- 상위 클래스인 Window 클래스는 타이틀,메뉴등이 지원되지 않기 때문에 일반적으로

  사용하지 않고 Frame 클래스를 사용한다.

 

- 기본적으로 경계선,타이틀,메뉴,최대화,최소화,종료 등의 기능을 제공한다.

 

- 최종적으로 화면에올릴 컴포넌트나 컨테이너를 적용한다.

 

 

#AWT Panel

 

- 실제로 구성되는 화면은 단순하지가 않는다 그래서 프레임에 올릴 때는 바로 올리지않고

  이 Panel에 올린 뒤에 프레임에 올린다.

 

- 보통은 그룹별로 묶어서 프레임에 붙이거나 다른Panel을 생성해서 자신에게 올리고 그것을 한번에

  프레임에 올리기도 한다.

 

 

#AWT Label

 

- 사각형 영역에 문자열을 표시할 때 사용하는 컴포넌트

 

- 경계선이 없고 문자열은 좌,우 중앙 정렬시킬 수 있다.

 

 

#AWT 기본 화면 구성

 

 

 

#Frame Setsize

 

 

 

 

#Frame에서 자주 사용하는 함수들

 

- setLocation (int left,int top) : 프레임의 화면상의 위치를 설정하는것

 -> 모니터 해상도를 가져오는 함수와 함께 사용하여 프레임의 위치를 설정할 때 자주 사용한다.

 

Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();

 

- setResizable(true) : 프레임의 크기를 조절을 가능하게 할것인지 여부

 

- getExtendedState: 프레임의 상태를 얻어온다.

-> MAXIMZED_HORIZ : 가로최대화

-> MAXIMZED_VERT : 세로최대화

-> MAXIMZED_BOTH : 둘다최대화

 

- getState : 프레임의 상태를 얻어옴

-> NORMAL : 윈도우가 기본 상태로 있음

-> ICONIFIED : 윈도우가 아이콘화 되어있음

 

 

#AWT - Layout Manager 

 

- 화면 분할을 담당하는 레이아웃

 

- FlowLayout , GridLayout , BorderLayout , CardLayout , GridBagLayout 등이 있다.

 

 

#AWT - FlowLayout

 

- 설정한 값에 따라 컴포넌트들이 왼쪽에서 오른쪽, 오른쪽에서 왼쪽 가운데에서 양쪽등으로

  정렬이 되는 레이아웃

 

 

 

 

#AWT - BorderLayout

 

- 컨테이너를 West,East,North,South,Center 모두 5개의 영역으로 나누고 각 영역에

  하나의 컴포넌트만 배치할 수 있는 레이아웃

 

- 컨테이너의 크기가 변경되면 위치는 고정이며 크기가 변한다.

  상,하 : 가로변경

  좌,우 : 세로변경

  가운데 : 가로,세로 변경

 

- 컴포넌트를 추가할 때 위치를 의미하는 텍스트와 같이 추가한다.

 

 

 

 

#AWT - GridLayout

 

- 행과 열을 만들어 컴포넌트들을 컨테이너 위에 순서대로 올린다.

 

- 컨테이너 크기가 변경되면 컴포넌트들의 위치는 고정 , 크기는 모두 동일한 크기로 변함

 

 

 

 

#그리드 뷰를 사용하여 달력 만들기

 

- 매달마다,주의 갯수가 다르고 토요일은 파랑색 일요일은 빨간색으로 표시

- 전달은 주말색깔에 상관없이 회색으로 표시

- 글자색을 바꾸는 메소드 setForeground(Color.Red) 같은 식으로 색을 찾아서 사용

 

 

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

Java [자료구조]  (0) 2017.09.24
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14
Java [GUI 프로그램2]  (0) 2017.09.13

*상속

- 객체지향 프로그래밍에서는 기존 클래스를 가져다가 소스코드를 건드리지않고

  추가되는 부분만 따로 작성해서 새로운 클래스를 만들수있음

- 클래스를 가져다가 확장해서 새로운 클래스를 만드는 기술을 상속이라 한다.

 

*슈퍼클래스,서브클래스

- 자바에서는 다른 클래스에게 상속해주는 값을 슈퍼클래스(Account)라 하고

  상속을 받는 클래스를 서브클래스(CheckingAccount)라 한다.

- 상속을 받으면 추가되는 필드와 메소드만을 선언하면 완성할수있다.

- 서브클래스에서 상속받을때 extends와 상속받을 슈퍼클래스이름을 받아야함

 

#계좌 클래스(슈퍼클래스)

 

#직불카드 클래스(서브클래스)

- 메소드 오버라이딩

- 슈퍼클래스에서 존재하는 메소드를 서브클래스에서 재정의

 

 

 

#메소드 오버라이딩2 super 사용

- 슈퍼클래스에 존재하는 메소드를 사용하고 서브클래스에서 재정의 또한 해준다.

 

 

#메인 메소드

 

 

#메소드 오버라이딩1 결과값

- 재정의 해주었기 때문에 값의 변동이 없다.

 

 

#메소드 오버라이딩2 결과값

 

- super클래스에 존재하는 인출값을 가져왔기때문에 100값이 빠져나감

 

 

#final

 

클래스에서 final 사용

 

- 클래스를 상속받지 못하게 할때 final 사용

 

#메소드에서 final 사용

 

 

- 메소드에서 오버라이드를 못하게 할때 사용

 

#변수에서 final 사용

 

- final 선언시 처음 세팅한 값을 바꿀수없음

 

#abstract클래스 (추상 클래스)

- 객체를 만드는것을 인스턴스화 라고한다.

- 해당클래스를 인스턴스화 할수 없지만 상속을 받을수 있도록 해주는 클래스

 

 

- 상속은 받지만 인스턴스화 할수 없음

 

#abstract메소드 (추상 메소드)

- 바디가 없는 메소드형태로 상속을 받은 서브클래스에서 반드시 오버라이드를 해줘야함

- 비슷한 기능을 메소드들은 같은 이름으로 묶음으로 개발시에 규격을 만들수있다.

 

 

- 추상메소드를 오버라이드하지않아 에러발생

 

 

- 오버라이드 할 경우 에러가 나지않음

 

#상속의 다형성

 

- 서브 클래스들은 슈퍼클래스 변수에 대입할수있다.

* 슈퍼클래스 변수에 담겨져 있다고 하더라도 오버라이드한 메소드가 있다면

  생성시 사용한 클래스에 오버라이드된 메소드가 실행된다.

 

- 다형성을 이용해서 객체2개를 생성하고 각각실행하면 오버라이드된 메소드가

  실행되는것을 알수있다.

 

 

 

#인터페이스(interface)

 

- 자바에선 다중상속을 허용하지않는다. 그러므로 비슷한 기능을 가진 메소드들을

  공통으로 정의해주고 싶을때 인터페이스를 사용한다.

 

- 인터페이스는 클래스들의 공통기능(메소드)만 표헌할수있고 공통데이터들은 표현할수없다.

  단 상수들은 선언이 가능하다.

 

- 상속이라는 용어대신 구현(implementation)이라한다.

 

- 인터페이스에 속하는 메소드는 무조건 추상메소드로 선언해야한다. 즉

  인터페이스의 역할은 규격을 만들어주는 역할을 한다.

 

- 인터페이스는 여러개를 구현할수있다. (, 컴마 사용)

 

#선언

 

- 인터페이스의 내부는 무조건 추상메소드라서 abstract를 추가하지않아도

  컴파일러가 자동으로 추가해준다.

 

 

 

 

- abstract를 추가해주지않아도 자동으로 추가됨

 

 

#인터페이스 사용 예

 

1.인터페이스만 구현할때

- implements 사용

 

2.상속과 인터페이스를 같이 구현할때

- extends로 상속받고 implements 사용

 

3.인터페이스를 여러개 구현할때

- ( , ) 컴마 사용

 

 

#인터페이스의 다형성

 

- Test -> Test2,Test3 구현

 

 

 

 

 

 

 

 

 

#인터페이스 상속

 

- 클래스에서 상속받은 서브클래스를 구현했을때 해당 서브클래스와 슈퍼클래스의 메소드

  까지 오버라이드 해서 구현해야한다.

 

 

 

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

Java [메소드]  (0) 2017.09.06
Java [switch,배열정렬,Calendar]  (0) 2017.09.03
Java [반복문,for,while]  (0) 2017.08.30
Java [문자열 가공,배열]  (0) 2017.08.28
Java [조건문,논리연산자,비교연산자]  (0) 2017.08.27

+ Recent posts