Java 39

[Collections Framework] Iterator 와 메서드 iterator

갑작스럽게, 이 포스팅을 하는 이유는, 메서드 iterator()에 대한 설명이 잘 이해가 가지 않아 정리할 겸 나처럼 헤매는 사람이 혹시라도 있을 수 있을까 봐이다. (그리고 내가 또 까먹을까 봐) ● Iterator Iterator는 컬렉션에 저장된 요소들에 대한 접근을 표준화하였다. Iterator는 인터페이스이고 이 인터페이스에는 hasNext, remove, next 3개의 추상 메서드가 존재한다. hasNext - 불러올 다음 요소가 있는지 확인한다. 존재한다면 true를 반환 next - 순차적으로 요소를 불러온다. remove - next로 불러온 요소를 제거한다.(next 없이 단독으로 쓰일 수 없다.) 그리고 Collection에는 이 Iterator 인터페이스를 구현한 클래스의 객체를..

Java/Java Study 2021.05.27

[Collections Framework] ArrayList

● ArrayList ArrayList는 컬렉션 프레임워크에서 가장 많이 사용되는 컬렉션 클래스이다. 인터페이스 List를 상속받으므로 그 특징 또한 그대로 물려받는다. ArrayList는 Array와 비슷한 면이 많지만 같진않다. 왜냐하면, Array는 정적 배열이고 ArrayList는 대표적인 동적 배열이다. ArrayList는 정적배열과는 다르게 추가, 삭제등을 할 수 있다. 이번 포스팅에선 ArrayList가 데이터를 저장하고 삭제, 추가하는 과정을 코드를 통해 조금 더 상세히 알아볼 것이다. 1) 순차적 데이터 저장 및 추가 ArrayList는 순차적으로 데이터를 저장하고 그 저장한 순서가 유지된다. 데이터를 추가할때는 ArrayList의 메서드, boolean add (Object o) 객체를..

Java/Java Study 2021.05.27

[JAVA 복습] 미니게임 WarriorVsMagician (update ver.2)

● 최대한 객체지향에 맞춰서 코드를 변경해보려 했지만, 아직 어디를 더 객체지향적으로 손봐야 할지 감이 오질 않는다. 코드를 바꾸면서 기존에 존재하던 규칙을 바꾸어 보았다. 먼저 기존의 규칙을 살펴보면 rule) 플레이어 두 명은 가위바위보를 하여 공격권을 얻어 자신의 플레이어 코드( warrior //player 1 , magician //plater 2)를 입력하면 공격을 한다. 개선점 사용자의 입력에 맞춰서 1/2 확률로 공격을 하도록 하여 현실에서 필요한 가위바위보를 없애며 운 적인 요소도 필요함과 동시에 확률을 단순히 1/2로 맞춰서 비등비등한 긴장감을 자아낼 수 있도록 하였음 잘못된 명령어 입력 시 재귀 호출을 사용하여 "go"외의 명령어는 허용치 않게 설계 다음에 추가하고 싶은 점 전적 기록..

Java/Daily-Java 2021.05.25

[Collections Framework] 컬렉션 프레임워크란?

● Collections Framework collections 이란 데이터의 군, 다수의 데이터를 의미하며 Collections Framework는 이런 다수의 데이터를 표준화된 방식(Framework)으로 처리하기 위하여 객체지향적인 설계로 고안된 프로그래밍 방식이다. 객체지향적인 설계로 되어있다는 것은 익히 알다시피 인터페이스와 다형성을 사용할 수 있으며, 그로 인해 코드의 재사용성을 높여주는 장점을 가진다. 컬렉션 프레임워크에 소속된 컬렉션 클래스들은 크게 3가지의 인터페이스를 구현하는데, 개발 시에 다룰 컬렉션, 다수의 데이터의 특징을 파악하여 해당 컬렉션에 사용하면 좋을 컬렉션 클래스를 사용하는 것은 개발자의 역량이다. 그렇다면 3가지 인터페이스와 그 특징을 알아보자 1) List - 순서가 ..

Java/Java Study 2021.05.24

[JAVA 복습] 미니게임 WarriorVsMagician

● 추상클래스와 다형성을 이용하여 만든 간단한 미니게임이다. 추상클래스를 인터페이스로 바꾸어도 실행에는 문제가 없다. import java.util.Scanner; abstract class Fightable { abstract int attack (); abstract boolean guard(); } class Warrior extends Fightable { int HP = 150; int guardProperty = 70; @Override public int attack() { return 10; } @Override public boolean guard() { int x = (int)(Math.random()*10)+1; if(x*10>guardProperty) return true; else..

Java/Daily-Java 2021.05.18

[객체지향] 인터페이스(Interface) (5/24 어휘수정)

● 인터페이스는 기존의 추상화 클래스보다 더 추상화가 높은 추상화 클래스의 개념이며, 기존의 미완성 설계도라는 추상 클래스의 개념과 거의 일치한다. 추상 클래스와 더불어 다소 모호한 개념인 인터페이스에 대해서 알아보기 전에 , 우선 인터페이스는 무엇인지 추상 클래스와 비교해서 알아보고, 인터페이스의 작성규칙과 인터페이스의 다형성까지 공부하면, 인터페이스의 장점에 대해 이해하기 쉬울 것이다. 인터페이스의 장점을 알면 이것을 왜 쓰는지, 쓰는 목적까지 공부하는 데 있어서 좀 더 수월할 것이다. 1) 추상 클래스 vs 인터페이스 이전에 포스팅했던 추상 클래스는 abstract가 제어자로 붙는 클래스이다(추상 메서드를 포함하는). 추상 클래스는 추상 메서드 외에도 멤버 변수와 또한 완성된 메서드를 가질 수 있다..

Java/Java Study 2021.05.16

[객체지향] 추상 클래스 (5월18일 추가내용)

● 제어자로 abstract 가 붙고, 메서드의 내용이 없는 메서드를 갖고 있는 클래스를 추상 클래스라고 정의한다. 처음 추상 클래스란 개념을 맞닥뜨리게 되면 추상 클래스의 정의 자체는 그렇게 어렵지 않지만, 그래서 이 추상 클래스가 뜻하는 바가 무엇이고, 왜 쓰는지가 아마 많이 궁금할 것이다. 이에 대해서 제대로 이해만 한다고 해도 객체지향에 대한 개념은 잘 정립되었다고 봐도 무방하다고 본인은 생각한다. 따라서 이번 포스팅에서 다루어볼 예정이다. 먼저 정의를 조목조목 따져보자. 1) 제어자 abstract 우리가 대표적으로 알고 있는 접근제어자는 private protected default public 등이 존재한다. 그 외에 각기 다른 임무를 수행하는 제어자들 중 abstract가 붙으면 추상 클래..

Java/Java Study 2021.05.16

[객체지향] 다형성, Polymorphism - Part3 (다형성의 장점)

● 다형성 part 1, 2에서 배운 다형성을 간략하게 정리해보자, part - 1) 조상타입의 참조변수로 자손타입의 객체를 생성할 수 있다.(자손의 인스턴스를 참조할 수 있다. 단, 조상타입의 참조변수로 자손타입의 멤버변수를 호출할 수는 없다.) part - 2) 상속관계의 두 클래스는 서로 참조변수의 형 변환이 가능하다. (다만 주의해야 할 점은 조상타입을 자손타입 다운 캐스팅할 때 조상타입의 참조변수가 자신의 인스턴스를 가리키고 있다면 이는 part - 1에 위배됨으로 형 변환하려는 참조변수가 어떤 인스턴스를 참조하고 있는지를 파악해야 한다.) 자 그러면 이런 다형성의 개념이 어떤 장점 때문에 쓰이는지를 알아보자. 1) 매개변수에 다형성을 줄 수 있다. 매개변수에 다형성을 준다는 게 무슨 의미일까?..

Java/Java Study 2021.05.13

this & this( ) & super (5월/13일 내용추가)

● 자바를 배우면서 한 번쯤은 누구나 헷갈릴만한 파트이다. 본 게시물에서 2 부분으로 나눠서 설명을 해보려 한다. 1) this & this( ) this를 무엇이라고 배웠는지 기억하는가? this는 바로 인스턴스 변수와 지역변수를 구분하기 위해서 쓰는 참조 변수이다. 여기서 인스턴스 변수는 클래스 내에 선언된 변수이고(Static이 붙지 않은), 지역변수는 메서드 내에 정의된 변수이다. 이 둘을 구별한다는 것인데 이게 무슨 의미인지 IPhoneTest라는 클래스를 만들어서 확인해보자 class iPhone { String model; String color; int capacity; iPhone(){ model ="iPhoneX"; color = "White"; capacity = 64; } iPhon..

Java/Java Study 2021.05.10

오버라이딩 vs 오버로딩

● 사실 코딩을 하는 과정에선 오버라이딩(Overriding)과 오버로딩(Overloading)을 헷갈릴 일은 없다. 왜냐하면 그 차이가 너무나도 명백하기 때문에 오버라이딩을 써야 하는 상황에서 오버로드를 쓰는 사람은 없을 것이기 때문이다. 하지만 굳이 이렇게 정리하는 이유는 면접에서 혹은 누군가가 물어본다면 그 차이를 명확히 설명하기 위해서이다, 또한 코딩을 처음 접하는 사람들은 각각의 개념도 잘 잡히지 않은 상태에서 이 둘을 헷갈려하면 굉장히 힘들기 때문이다(경험담). 언제나 그렇듯 간단하게 처음에 정리해보자면 오버로딩은 새로운 메서드를 형성하는 것이고 , 오버라이딩은 상속받은 메서드의 내용을 수정하는 것, 먼저 오버로딩부터 살펴보면 , 오버로딩은 한 클래스 내에서 이름이 같은 새로운 메서드를 형성하..

Java/Java Study 2021.05.08