본문 바로가기

개발/이론

(10)
[JAVA] Iterator와 ListIterator * Iterator : 컬렉션 인터페이스중 하나, 메소드 기능 boolean hasNext() 읽어올 element 가 있으면 true 반환 Object next() 다음 element 읽어오기 next() 호출 전 hasNext()로 읽어올 element 가 있는지 확인하는게 안전 void remove() next() 로 읽어온 element 삭제 List list = new ArrayList(); Iterator it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } * ListIterator : Iterator를 상속받아 기능을 추가한 것, 컬렉션의 요소에 접근할 때 Iterator는 단방향으로만 이동이 가능하지만, ..
[JAVA] List와 ArrayList / ArrayList와 Array 우선 ArrayList 는 클래스이고, List 는 인터페이스라는 점에서 차이가 있다. 클래스인 ArrayList 를 사용해서 생성 시점에 List 외에도 RandomAccess,Serializable 인터페이스 등을 구현할 수 있는 것이다. 클래스 와 인터페이스에 대해서는 이전 게시글을 참고! 2019/11/20 - [자바/기본 개념] - 추상클래스와 인터페이스 / 상속과 다형성 만약, 이렇게 선언을 했다면 List list = new ArrayList(); ArrayList list = new ArrayList(); List는 인터페이스이므로 도형에 비유할 수 있고, ArrayList 는 클래스이므로 정사각형이라고 비유할 수 있다. 그렇다면 ArrayList 는 그냥 배열 Array와 비교했을 때 어..
[JAVA] 추상클래스와 인터페이스 / 상속과 다형성 1) 클래스는 크게 일반 클래스와 추상 클래스로 구분, 그 중 추상 클래스 : 클래스 내 '추상 메소드' 가 하나 이상 포함되거나 abstract로 정의된 경우 : 여러 메소드가 존재, 따라서 그대로 가져다 쓰거나, 오버라이드 하거나, abstract 가 붙은 메소드만 반드시 구현해주면 되는 게 추상 클래스 2) 인터페이스는 모든 메소드가 추상 메소드인 경우 : 미리 이런 메소드들을 사용할 것이라고 인터페이스에 선언해두고, 상속 시 안에 선언된 모든 메소드들을 구현하면 되는게 인터페이스 -> 결국 둘 다 상속 받은 자식이 반드시 구현을 하도록 만들 때 사용 -> 스스로 new 로 객체 생성이 불가능 한마디로 둘의 차이는 ? 추상 클래스는 클래스를 상속 받아 기능을 이용 및 확장, -> 상속 (Inheri..
[Algorithm] 복잡도 - 탐색 알고리즘(선형, 이진, 해싱) 탐색 알고리즘: n개의 데이터가 등록되어있는 테이블에서 어떤 특정 키를 가지는 데이터를 찾아내는 처리 1. 선형 탐색: 가장 단순한 탐색 알고리즘/ 배열의 처음부터 마지막까지 읽어 들이면서 순서대로 키와 요소 비교 eclipse-workspace - algorithm_uni/src/algorithm_uni/LinearSearch.java-> while 루프의 한번 실행 시 복잡도는2,3,5 행의 복잡도를 합한 것: O(1) + O(1) + O(1) = O(max(1,1,1)) = O(1) -> while 루프는 평균 n/2반복, 전체 복잡도는: O(1) ∙ (n/2) = O(1) ∙ O(n) = O(n) -> 따라서 search 메서드의 (선형 탐색) 전체 복잡도: O(1) + O(n) + O(1) + ..
[Algorithm] 알고리즘과 복잡도 알고리즘: 처리 순서를 기술한 것 알고리즘 + 자료구조 = 프로그램 알고리즘을 공부해야하는 이유?: 문제 해결 필요 -> 여러 프로그램 중 어떤 것이 이 문제를 해결하는데 적합할지 판단 -> 이 때 입력 데이터의 양,가용자원(cpu, 메모리) 등을 고려하여 어느 알고리즘을 선택할지 판단 -> 그러기 위해서는 알고리즘의 성능, 평균 소모 시간, 최악/최선 소모 시간 등에 대해 알고 있어야 함 퀵 소트: 내부정렬 (메모리 상에서 정렬을 함) 알고리즘 중에서도 가장 고속 복잡도: 일반적으로 복잡도에는 시간/공간이 있지만 그냥 복잡도 라고 하면 시간복잡도를 의미하며, 최악/평균 복잡도가 있으나, 대부분의 알고리즘은 최악복잡도만 알면 충분 복잡도의 덧셈복잡도 O(f(n)) , O(g(n)) 인 두 조작은 연속 실..
[JAVA] static *static 편* 자바 에서는 static 을 통해 클래스의 필드를 공유할 수 있도록 함 인스턴스 변수 : 공유되지 않은 필드, 인스턴스마다 자신의 필드 생성, 사용: 객체 별 관리: 객체 생성 후 사용 가능: 객체가 소멸될 때 자동 소멸: 객체가 여러개-> 인스턴스 변수도 여러개 static (정적) 변수 : 모든 인스턴스가 공유하는 필드: 객체 생성 전 접근, 사용 가능 : 객체 여러개 생성-> 정적 변수는 하나 ** 주의 : 객체 자신을 가리키는 this 사용 불가능: 인스턴스 변수, 메서드 사용 불가능(인스턴스 멤버들은 객체 생성 후 생성이 되기 때문에 static에서 아직 생성되지 않은 멤버들을 사용할 수 없다는 개념) 사용: 클래스 이름. 정적 멤버(필드or 메서드 이름) final : 상수..
[JAVA] 클래스 *클래스 편* 추상화: 중요한 정보만 클래스로 표현하는 것 선언: 보통 한 소스 파일마다 하나의 클래스를 선언하지만, 그 이상을 선언하기도 함/ 둘 이상이라면 하나만 public, 그 클래스 이름은 파일이름과 동일해야함(메인 클래스를 나타내주는 개념) -> 즉, 접근지정자 붙은 클래스명을 파일명으로 해야함 Ball.javapublic class Ball(){...} ... -> 컴파일 -> Ball.class / Cylinder.class 생성class Cylinder{...} 같은 패키지라면 접근지정자가 없을 시 가져다가 사용 가능 파일명: PhoneDemo.java객체명: myPhone, yourPhone-> 각 객체의 메서드에 접근할때에는 . 사용 필드 model, value 는 캡슐화 되지 않았기..
[JAVA] 메서드, 객체 *메서드 편* Static : 컴파일되는 시점에 미리 메모리에 올라와 있음, 따라서 객체 생성 없이 실행이 가능Ex> main 은 항상 먼저 시작되기 때문에 static 필수, 리턴형 존재하지 않기 때문에 void 메서드 호출에서의 값 전달 의미: call by value (함수 실행후 main 으로 돌아오면 함수에서 변경된 변수의 값 그대로 main으로 오는 것이 아니라 main 에서의 마지막 수행 값이였던 값으로 돌아옴) 메서드 오버로딩: 메서드 이름은 같고 시그니처만 다르게/ 객체지향이기 때문에 가능 *객체 편* 객체(인스턴스) : 클래스상태(변수) : 필드동작: 메서드 -> 클래스에서 객체를 찍어내는 것 + 객체 지향 특성1. 캡슐화: 접근지정자를 이용해 외부에서 정보를 보이지 않도록 은닉2. 상..