레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시

Java #5-1 상속 관계에 있는 클래스 간 멤버 접근

Person.java

public class Person
{
String name;
public int age;
protected int height;
private int weight;

public int getHeight()
{
return height;
}

public void setWeight(int weight)
{
this.weight = weight;
}

public int getWeight()
{
return weight;
}
}


Student.java

public class Student extends Person
{
void set(String name, int age, int height, int weight)
{
super.name = name;
super.age = age;
super.height = height;
setWeight(weight);
}
static void print(Student s)
{
System.out.println(s.name+", "+s.age);
System.out.println(s.getHeight()+"cm, "+s.getWeight()+"kg");
}
public static void main(String[] args)
{
Student s = new Student();
s.set("Jiniusman", 25, 175, 62);
print(s);
}
}


result)

Java #4-4 static 멤버

선언

class Sample
{
 static int m
 static void g() { ... }
}

공간적 특성

멤버는 클래스당 하나 생성
멤버는 객체 내부가 아닌 별도의 공간에서 생성
클래스 멤버라고 부름

시간적 특성

클래스 로딩 시에 멤버 생성
객체가 생기기 전에 이미 생성
객체가 생기기 전에도 사용 가능
객체가 사라져도 멤버는 사라지지 않음
멤버는 프로그램이 종료될 때 사라짐

공유의 특성

동일한 클래스의 모든 객체들에 의해 공유됨


/* static 필드와 메소드를 이용하여 달러와 원화를 변환해주는 환율 계산 프로그램 작성 */
class CurrencyConverter
{
private static double rate;

public static double toDollar(double won)
{
return won/rate;
}

public static double toWon(double dollar)
{
return dollar*rate;
}

public static void setRate(double rate)
{
CurrencyConverter.rate = rate;
}
}

public class StaticMember
{
public static void main(String[] args)
{
CurrencyConverter.setRate(1118.0);

System.out.println("300만원은 "
+String.format("%.1f", CurrencyConverter.toDollar(3000000))
+"달러 입니다.");
System.out.println("300달러는 "+CurrencyConverter.toWon(300)+"원 입니다.");
}
}


result)


Java #4-3 생성자

/* 책제목, 저자, ISBN 생성자로 받고 출력하는 프로그램*/
public class Book
{
String title;
String author;
String ISBN;

public Book(String title, String author, String ISBN)
{
this.title = title;
this.author = author;
this.ISBN = ISBN;
}

void print()
{
System.out.print(title+", ");
System.out.print(author+", ");
System.out.print(ISBN);
}

public static void main(String[] args)
{
Book javaBook = new Book("명품 JAVA Programing", "황기태", "978-89-7050-764-4");

javaBook.print();
}
}


result)

Java #4-2 메소드 활용

/* String타입의 문자열에서 '/'를 공백(' ')으로 바꿔주는 메소드 작성 후 활용 */
public class ArrayParameter
{
static String origin = "jiniusman/jiniusman.blogspot.kr/2013";

static char[] replaceSlash(String origin)
{
char c[] = origin.toCharArray();

for(int i=0; i<c.length; i++)
{
if(c[i]=='/')
c[i] = ' ';
}

return c;
}

public static void main(String[] args)
{
System.out.println(origin);
System.out.println(ArrayParameter.replaceSlash(origin));
}
}


result)

Java tip 이클립스에서 Construct와 Getters, Setters 쉽게 설정하기

1. 클래스, 필드 선언


2. Source - Generate Constructor using Fields...


3.  Construct에 필요한 매개변수 선택


4. Source - Generate Getters and Setters...


5. 필요한 매개변수 선택(여기서는 Getters만 적용)


6. 완료


Java #4-1 클래스와 객체

클래스 관련 용어 정리

클래스 : 객체를 생성하기위한 설계도나 틀, 필드와 메소드를 가진다.
객체 : 클래스로부터 만들어진  것
필드 : 값이 저장되는 멤버 멤버변수
메소드 : 실행 가능한 함수, 객체의 행위를 구현한 함수
생성자 : 클래스의 이름과 동일한 메소드, 주로 필드의 초기값을 주어줄 때 사용

ex)
/* 상품 클래스를 만들어 초기값 세팅후 처리 */
public class Goods
{
private String name;
private int price;
private int numerOfStock;
private int numerOfSales;

public Goods(String name, int price, int numerOfStock, int numerOfSales)
{
super();
this.name = name;
this.price = price;
this.numerOfStock = numerOfStock;
this.numerOfSales = numerOfSales;
}

public String getName() { return name; }
public int getPrice() { return price; }
public int getNumerOfStock() { return numerOfStock; }
public int getNumerOfSales() { return numerOfSales; }

public static void main(String[] args)
{
Goods[] cameras = new Goods[3];

for(int i=0; i<cameras.length; i++)
{
cameras[i] = new Goods("Cannon EOS "+(i+4)+"00D", (i+1)*10+900, i, 10-i);

System.out.println("\n"+cameras[i].getName());
System.out.println("Price : $"+cameras[i].getPrice());
System.out.println("Numer Of Stock : "+cameras[i].getNumerOfStock());
System.out.println("Numer Of Sales : "+cameras[i].getNumerOfSales());
}
}
}


result)

Java #3-4 main() 메소드, Exception 처리

main() 메소드 특징

자바 응용프로그램의 실행은 main() 메소드부터 시작한다.
main() 메소드는 public 속성이다.
main() 메소드는 static 속성이다.
main() 메소드는 리턴 타입은 void이다.
main() 메소드의 인자는 문자열 배열(String [])이 전달된다.


주요 Exception

ArithemeticException 정수를 0으로 나누는 경우
NullPointerException null 레퍼런스를 참조하는 경우
ClassCastException 변환할 수 없는 타입으로 객체를 변환하는 경우
OutofMemoryException 메모리가 부족한 경우
ArrayIndexOutOfBoundsException 배열의 범위를 벗어나 접근하는 경우
IllegalArgumentException 잘못된 인자를 전달하는 경우
IOException 입출력 동작 실패하거나 인터럽스가 발생하는 경우
NumberFormatException 문자열이 나타는 숫자와 일치하지 않는 타입의 숫자로 변환하는 경우


try, catch, finally문

try 예외가 발생할 가능성이 있는 실행문장
catch 예외가 발생할 경우 처리문장
finally 예외 발생여부와 상관없이 무조건 실행되는 문장

ex)
/* 0으로 나누는 경우 */
import java.util.Scanner;

public class ExceptionSample
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int divisor, dividend;
System.out.print("divisor : ");
divisor = sc.nextInt();
System.out.print("dividend : ");
dividend = sc.nextInt();
try
{
System.out.println(divisor/dividend);
}
catch(ArithmeticException e)
{
System.out.println("divide by zero.");
}
}
}

result)







/* 범위를 벗어난 배열의 접근 */
public class ExceptionSample
{
public static void main(String[] args)
{
int[] intArray = new int[3];
try
{
for(int i=0; i<intArray.length+1; i++)
{
intArray[i] = i;
System.out.println(intArray[i]);
}
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Out of Bounds.");
}
}
}

result)






Java #3-3 다차원배열

다차원배열

/*
다음 과 같은 비정방형 배열 만들기
10 11 12
20 21
30 31 32
40 41
*/
public class IrregularArray
{
public static void main(String[] args)
{
int intArray[][] = new int[4][];
intArray[0] = new int[3];
intArray[1] = new int[2];
intArray[2] = new int[3];
intArray[3] = new int[2];
for(int i=0; i<intArray.length; i++)
{
for(int j=0; j<intArray[i].length; j++)
{
intArray[i][j] = 10*(i+1)+j;
System.out.print(intArray[i][j]+" ");
}
System.out.println();
}
}
}


result)







메소드에서 배열 리턴

/* 배열을 생성, 각 원소를 인덱스 값으로 초기화하여 리턴하는 메소드 작성 */
public class ReturnArray
{
static int[] makeArray()
{
int temp[] = new int[5];
for(int i=0; i<temp.length; i++)
temp[i] = i;

return temp;
}

public static void main(String[] args)
{
int intArray[] = makeArray();

for(int i=0; i<intArray.length; i++)
System.out.println("intArray["+i+"] =" +" "+intArray[i]+" ");
}
}


result)

Java #3-2 배열

배열 접근

/* 5개의 수 입력받아 배열에 저장한 뒤 가장 큰 수를 화면에 출력하는 프로그램 */
import java.util.Scanner;

public class ArrayAccess
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int number[] = new int[5];
int max = Integer.MIN_VALUE;

for(int i=0; i<number.length; i++)
{
System.out.print(i+1+"번째 수 입력 : ");
number[i] = sc.nextInt();

if(max<number[i])
max = number[i];
}
System.out.println("입력하신 수 중 가장 큰 수는 "+max+"입니다.");
}
}










배열을 이용한 반복문 (for-each문)

/* int, String, enum 타입을 이용한 반복문 활용 프로그램 */
public class ForEachSample
{
enum Week {월, 화, 수, 목, 금, 토, 일}

public static void main(String[] args)
{
int num[] = {1, 2, 3, 4, 5};
String alpha[] = {"a", "b", "c", "d", "e", "f"};
int sum = 0;

for(int i : num)
sum += i;
System.out.println(sum);

for(String s : alpha)
System.out.print(s+" ");
System.out.println();

for(Week day : Week.values())
System.out.print(day+" ");
System.out.println();
}
}


Java #3-1 반복문

for문

/* 1부터 10까지 덧셈을 표시하고 합을 구하는 프로그램 */
public class ForSample
{
public static void main(String[] args)
{
int sum = 0;
for(int i=1; i<=10; i++)
{
sum += i;
System.out.print(i);
if(i==10)
System.out.println("="+sum);
else
System.out.print("+");
}
}
}





while문

/* 숫자를 여러 개 입력받고 그 수의 평균을 출력하는 프로그램(0이 입력되면 종료) */
import java.util.Scanner;

public class WhileSample
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int number;
double sum = 0;
int count = 0;
while((number=sc.nextInt()) != 0)
{
sum += number;
count++;
}
System.out.println("입력하신 모든 수의 평균은 "+sum/count+"입니다.");
}
}









do-while문

/* 'a'부터 'z'까지 출력하는 프로그램 */
public class DoWhileSample
{
public static void main(String[] args)
{
char alpha = 'a';

do
{
System.out.print(alpha++);
}
while(alpha<='z');
}
}





중첩 반복문

/* 구구단 출력 프로그램(가로방향, 세로방향) */
public class NestedLoop
{
public static void main(String[] args)
{
for(int i=2; i<10; i++, System.out.println())
for(int j=1; j<10; j++, System.out.print('\t'))
System.out.print(i+"*"+j+"="+i*j);
System.out.println();
for(int i=1; i<10; i++, System.out.println())
for(int j=2; j<10; j++, System.out.print('\t'))
System.out.print(j+"*"+i+"="+i*j);
}
}




Java #2-5 자바 기본 프로그래밍 - 조건문

단순 if문
/* 점수가 80점 이상이면 합격 판별을 하는 프로그램 */
import java.util.Scanner;

public class SuccessOfFail
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

System.out.print("점수 입력 : ");
int score = sc.nextInt();

if(score >= 80)
System.out.println("Success");
}
}





if-else문
/* 입력된 수가 3의 배수인지 판별하는 프로그램 */
import java.util.Scanner;

public class MultipleOfThree
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

System.out.print("숫자 입력 : ");
int number = sc.nextInt();

if(number%3 == 0)
System.out.println("입력하신 숫자는 3의 배수입니다.");
else
System.out.println("입력하신 숫자는 3의 배수가 아닙니다.");
}
}





다중 if문
/* 입력된 성적에 대해 학점을 부여하는 프로그램(ctrl+z를 입력하였을 경우 종료) */
import java.util.Scanner;

public class Grading
{
public static void main(String[] args)
{
char grade;
int score;
Scanner sc = new Scanner(System.in);

// hasNext 메소드는 키 입력된 값이 입력되면 treu, 그 값이 ctr+z라면 false 리턴
while(sc.hasNext())
{
score = sc.nextInt();

if(score >= 90)
grade = 'A';
else if(score >= 80)
grade = 'B';
else if(score >= 70)
grade = 'C';
else if(score >= 60)
grade = 'D';
else
grade = 'F';

System.out.println("성적은 "+grade+"입니다.");
}
}
}








switch문
/* 입력된 성적에 대해 학점을 부여하는 프로그램(ctrl+z를 입력하였을 경우 종료) */
import java.util.Scanner;

public class Grading2
{
public static void main(String[] args)
{
char grade;
int score;
Scanner sc = new Scanner(System.in);

while(sc.hasNext())
{
score = sc.nextInt();

switch(score/10)
{
case 10 :
case 9 :
grade = 'A'; break;
case 8 :
grade = 'B'; break;
case 7 :
grade = 'C'; break;
case 6 :
grade = 'D'; break;
default :
grade = 'F';
}

System.out.println("성적은 "+grade+"입니다.");
}
}
}


Java #2-4 자바 기본 프로그래밍 - 연산자

연산자 종류

증감 : ++ --
산술 : + - * / %
시프트 : >> << >>>
비교 : > < >= <= == !=
비트 : & | ^ ~
논리 : && || !
조건 : ? :
대입 : = += -= *= /= &= ^= |= <<= >>= >>>=

연산자 우선순위

++ -- (증감연산자 postfix)
+ - (부호), ++, -- (증감연산자 prefix), ~, !
형변환
* / % (산술)
+ - (산술)
>> <<< >>> (시프트)
> < <= >= (비교), instanceof
== != (비교)
& (비트)
^ (비트)
| (비트)
&& (논리)
|| (논리)
? : (조건)
= += -= *= /= &= ^= |= <<= >>= >>>= (대입)

Java #2-3 자바 기본 프로그래밍 - 자바에서 키 입력

System.in

System.in은 키보드 장치와 연결된 로우 레벨 입력 스트림 객체이다. 입력되는 키 값을 바이트 정보로 반환하여 바이트 정보를 문자 정보로 변환해야 어떤 문자가 입력되었는지 판단할 수 있다.

ex)
import java.io.*; // InputSreamReader의 사용을 위한 임포트문

public class InputExample {
public static void main(String args[])
{
InputStreamReader rd = new InputStreamReader(System.in);
try
{
while(true)
{
int a = rd.read();
if(a == -1) // -1은 ctrl+z 를 의미
break;
System.out.print((char)a);
}
}
catch(IOException e)
{
System.out.println("입력 오류");
}
}
}

result)





Scanner

Scanner는 사용자가 입력하는 값을 공백('\t', '\f', '\r', ' ', '\n')으로 구분하고 읽는다.

ex)
import java.util.Scanner;

public class ScannerExam {
public static void main(String args[])
{
Scanner a = new Scanner(System.in);
System.out.println("input age, weight, height.");

System.out.println("age : "+a.nextInt());
System.out.println("weight : "+a.nextDouble()+" kg");
System.out.println("height : "+a.nextDouble()+" cm");
}
}

result)


Java #2-2 자바 기본 프로그래밍 - 데이터 타입

데이터 타입

기본 타입
boolean (1byte)
char (2byte)
byte (1byte)
short (2byte)
int (4byte)
long (8byte)
float (4byte)
double (8byte)

byte < short/char < int < long < float < double

레퍼런스 타입
배열에 대한 레퍼런스, 클래스(class)에 대한 레퍼런스, 인터페이스(interface에 대한 레퍼런스

자동 타입 변환
한 타입의 데이터를 다른 데이터 타입으로 변환하는 것으로 개발자가 명시적으로 지정하지 않아도 자동적으로 이루어지는 변환이다. 작은 데이터 타입에서 큰 데이터 타입으로 타입 변환을 하면 원본 데이터의 손실 없이 그대로 보존 되기 때문에 자동 타입 변환이 일어난다.

ex)
  long var;
  int n = 32555;
  byte b = 25;
  var = n; // var = 32555
  var = b; // var = 25

강제 타입 변환
데이터 타입을 바꿀 때 데이터의 손실이 발생할 수도 있으므로 자동으로 타입 변환이 일어나지 않으며 개발자가 명시적으로 타입 변환을 지정해야 변환이 이루어진다.

ex)
  short var;
  int n = 855638017;
  var = (short) n; // int 타입에서 short 타입으로 강제 변환, var = 1

  double d = 1.9;
  n = (int) d; // n = 1;

Java #2-1 자바 기본 프로그래밍 - 식별자

식별자(identifier)

클래스, 변수, 상수, 메소드 등에 붙이는 이름

규칙
특수문자(%, *, &, @, ^ 등), 공백(탭, 스페이스 등)은 식별자로 사용할 수 없느나 '_', '$'는 사용할 수 있고 한글 또한 가능하다.
식별자의 첫 문자에 숫자를 사용할 수 없다.
대소문자를 구별하고 길이 제한이 없다.
자바 언어의 키워드는 사용할 수 없다.

자바 키워드
abstract
assert
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
enum
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
strictfp
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while


Java #1 자바 시작

compile

컴퓨터는 기계어를 이해할 수 있다. C나 Java같은 고급 언어로 작성된 프로그램은 컴퓨터가 이해할 수 없으므로 프로그램을 기계어로 변환하는 과정이 필요하다. 이를 컴파일(compile)이라 하고, 그런 과정을 처리하는 소프트웨어를 컴파일러(compiler)라고 한다. 각 언어마다 고유한 컴파일러가 있어, C 컴파일러로는 Java 프로그램을 컴파일할 수 없다.


Java와 C/C++ 실행환경 및 실행과정 차이

Java
링크과정없이 컴파일러가 바로 바이트 코드 생성
바이트 코드는 JVM에서만 실행이 가능
런타임에 필요한 클래스들이 JVM에 의해 링크되며 클래스 로더가 동적으로 필요한 클래스를 로딩
ClassLoader 객체를 이용하여 프로그래머가 직접 클래스를 로딩 가능

C/C++
컴파일러가 중간단계인 오브젝트 코드를 생성한 후 링커가 필요한 라이브러리들을 링크하여 최종 실행이 가능한 실행 파일을 생성
정적 라이브러리의 경우 라이브러리를 실행 파일에 포함시키므로 실행 파일 크기가 커짐
동적 라이브러리의 경우 런타임에 링크
오브젝트 코드 및 실행 파일은 플랫폼에 따라 다르므로 플랫폼이 바뀌면 컴파일 및 링크를 새로 해야함


Java 배포판의 종류

Java SE(Standard Edition) - 자바 표준 배포판, 데스트톱 응용프로그램과 서버 응용프로그램의 개발 플랫 폼이다.
Java ME(Micro Edition) - 모바일용 배포판, SE의 축소판이며 임베디드 및 가전제품을 위한 API가 정의되어 있다.
Java EE(Enterprise Editon) - 기업용 배포판, SE를 기본으로 인터넷 기반의 서버사이드 컴퓨팅 관련 API가 추가 되어있다.


Java의 특징

객체지향
자바는 객체지향 언어로서 클래스 계층구조, 상속성, 다형성, 캘슐화 등을 지원한다. 객체 지향 프로그램은 해결할 과제를 실제 세상의 객체와 객체 간의 상호 관계로 모델링하여 인간의 사고에 가깝게 표현한다.

멀티스레드
자바는 하나의 프로그램에서 운영체제의 도움 없이 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한다.

플랫폼 독립성
자바는 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일 되며 자바 가상 기계(JVM)만 있으면 하드웨어나 운영체제를 막론하고 자바 프로그램의 실행이 가능하다.

소스와 클래스 파일
하나의 자바 소스 파일에는 여러 개의 클래스를 작성할 수 있지만, 하나의 클래스 파일(.class)에는 반드시 하나의 컴파일된 자바 클래스만이 포함된다. 하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언할 수 있다. 파일 내 public으로 선언된 클래스의 이름과 소스 파일의 이름이 동일하게 작성되어야 한다.

실행모듈
자바 응용프로그램은 한 개 이상의 클래스 파일로 구성된다. 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포 및 실행이 가능하다. 실행은 항상 main 메소드에서 시작된다. 하나의 클래스 파일에 하나 이상의 main 메소드는 있을 수 없지만 다수의 클래스 파일이 각각 main 메소드를 갖는 것은 가능하다.

클래스로 캡슐화
클래스 내에 변수나 메소드를 구현함으로써 캡슐화가 가능하다. 클래스에 속하지 않은 변수나 메소드는 있을 수 없다. 클래스 안에 내부 클래스를 만드는 것은 가능하다.

패키지
자바의 독특한 개념으로 서로 관련있는 클래스를 패키지로 묶어 관리한다.