본문 바로가기

개발자노트

(260)
컬렉션 프레임워크 <제네릭> 타입을 강제! 형변환의 번거로움을 해결 int, string,... 뿐만 아니라 내가 만든 클래스도 사용 가능! package class01; import java.util.ArrayList; class Person { String name; int point; void use() { this.point--; System.out.println(this.name + "님 출력중..."); } Person(String name, int point) { this.name = name; this.point = point; } @Override public String toString() { return "Person [name=" + name + ", point=" + point + "]"; } } public..
컬렉션 프레임워크 [ArrayList] 랜덤 홀수담기 package class01; import java.util.ArrayList; import java.util.Random; public class Test02_02 { public static void main(String[] args) { // "자료형" 이슈가 생김 // "제네릭" -> 컬렉션에 저장 될 데이터들의 타입(자료형)을 "강제" // => 모든 컬렉션에는 제네릭을 추가해서 사용!! ArrayList al = new ArrayList(); Random rd = new Random(); while (al.size() != 5) { int num = rd.nextInt(9) + 1; if (num % 2 == 1) { al.add(num); } } System.out.println(al); i..
컬렉션 프레임워크 [ArrayList] 배열과 [ArrayList] 의 차이 배열 [ArrayList] 크기가 분명히 정해져있어야함 == 요소의 개수 요소를 계속 추가할 수 있음 -> data.length ->size() 자료형 고정,크기고정,같은 타입,관련된 조건 자료형 자유, 크기자유 → 강제가 없어서 오히려 불편할 수도 있다(형변환), 실수에 관대해짐 package class01; import java.util.ArrayList; class A { int a; int b; A(int a, int b) { this.a = a; this.b = b; } @Override public String toString() { return " A 클래스로 만든 객체"; } } public class Test01 { public static void ..
클래스 ) 인터페이스 package class06; // [인터페이스] class Phone{ Watch watch; void soundUp() { watch.soundUp(); } void soundDown() { watch.soundDown(); } } class Watch implements usePhone{ @Override public void soundUp() { // TODO Auto-generated method stub } @Override public void soundDown() { // TODO Auto-generated method stub } @Override public void power() { // TODO Auto-generated method stub } } public class Test0..
클래스) 추상메서드 package class02; abstract class Po { String name; abstract void func1() ; // 각각의 몬스터마다 고유한 액션 -> 오버라이딩 => "강제"했으면 좋을텐데.. // 추상 메서드 : 메서드바디{}를 갖지 않는다. // 오버라이딩이 강제되었다면, 동적바인딩에 의해 자식 메서드만 출력될 것이기 때문에.. // 추상 메서드를 하나라도 가지게 된다면, 그 클래스는 추상클래스가 되어야함. // 동적바인딩에 의해서 참조가 될 일이 없음!! 그래서 {} 바디가 있을 필요가 없음!! abstract void func2() ; // 각각의 몬스터마다 고유한 액션 -> 오버라이딩 void func3() { System.out.println("도망"); } void f..
클래스) 추상클래스 1. 과거에 공통특성을 지닌 클래스들을 묶어서 그들의 부모 클래스를 정의하고싶었다. 2. 이 때 사용되는게 추상클래스 추상클래스 -> 클래스들을 묶은것 붕어빵틀의 틀( 붕어빵 틀은 이렇게 생겨야해!! 라는 가이드라인) 붕어빵을 굽는 것에는 관심XX => 객체를 생성 XX 추상클래스의 관심은 오로지 "틀" 앞으로의 클래스들이 어떻게 구성되어야하는지에만 관심이 있음. ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 3. 현재에는 붕어빵틀들의 틀로써만 사용! 4. 앞으로 만들 클래스들을 정의하는데에 사용!! 5. 객체를 생성하지 않는다. ★★★ package class02; // [추상클래스] // 객체화를 하지 못하게 "강제" --> 실수 할 일을 줄여줌 abstract class ..
클래스) 상속.. 동적바인딩 다형성을 사용하여 메소드를 호출할 때, 발생하는 현상이다. 프로그램이 진행(즉, Runtime) 되면서 객체의 동작이 정해지는 것 정적바인딩( 컴파일 될 때 ) 실제 참조하는 객체는 서브 클래스이니 서브 클래스의 메소드를 호출한다. package class01; // [동적바인딩] = 맨 아래 라인 참조 class Point{ int x; int y; void move(int x,int y) { this.x=x; this.y=y; System.out.println("변경 완료!"); } Point(){ this(0,0); } Point(int x, int y){ this.x=x; this.y=y; } @Override public String toString() { return "("+this.x+","..
클래스) 상속.. 포켓몬 예제 + 기능 모듈화 package class01; import java.util.Random; import java.util.Scanner; class Pokemon { String name; int level; int exp; void action() { System.out.println(this.name + "이(가) ㅁㅁ공격!"); if (this.check()) { this.success(); } else { this.fail(); } } boolean check() { Random rand = new Random(); int num = rand.nextInt(5); // 성공 80% 실패 20% if (num == 0) { return false; } return true; } void success() { Ran..