전체 글 82

[객체지향] Static 메서드는 언제 쓸까?

● 인스턴스 메서드 인스턴스 생성 후, '참조 변수. 메서드명()'으로 호출 인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련된 작업을 하는 메서드 메서드 내에서 인스턴스 변수 사용 가능 ● static 메서드 (클래스 메서드) 객체 생성 없이 '클래스 이름. 메서드 이름()'으로 호출 인스턴스 멤버와 관련 없는 작업을 하는 메서드 메서드 내에서 인스턴스 변수 사용불가 인스턴스 메서드는 객체를 생성하여 참조 변수를 이용하여 접근해야 한다. 반면에 클래스 메서드는 별도의 객체 생성 없이 호출이 가능한 메서드이다 자바를 좀 공부한 사람들은 아마도 위의 내용을 다 잘 알고 있을 수도 있다. 그렇다면 혹시 Static을 언제 붙여야 하는지 당신은 아는가? 먼저 인스턴스 메서드는 왜 객체를 선언해야 하는지 ..

Java/Java Study 2021.06.02

[Collections Framework] LinkedList (vs Array)

● LinkedList ArrayList와 마찬가지로 List를 상속받는 컬렉션 클래스이다. List를 상속받으므로 데이터의 저장 순서를 유지하고, 데이터의 중복을 허용한다. LinkedList는 기존의 배열의 단점을 보완한 새로운 자료구조이다. 우선, 기존의 배열(Array)의 단점이 무엇이었나? 크기를 변경할 수 없다. 중간에 존재하는 요소의 삭제 또는 요소의 추가가 어렵다(시간이 많이 걸린다.) 사실 1과2는 서로 깊은연관이있다. 배열의 크기를 변경할 수 없기때문에 중간에 요소를 추가하거나 삭제하려면 새로운 배열을 생성하여 복사해야하기 때문이다. 그렇다면 LinkedList는 이러한 배열(Array)의 단점을 어떻게 보완하였고 차이점은 무엇이며, 왜 사용하는지에 대해서 알아보자. ● Array와 L..

Java/Java Study 2021.05.31

[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