반응형

간단 지식 65

02. List(배열리스트, 단순연결리스트, 이중연결리스트)

선형 자료구조인 리스트는 그 종류가 다양하다. 그 중에서 가장 대표적인 배열리스트(array list), 단순연결리스트(linked list), 이중연결리스트(doubly linked list)에 대해서 정리해보았다. 배열리스트는 배열을 이용한 리스트형 자료구조로, 자바에서 지원해주는 클래스인 import java.util.ArrayList; 를 사용하면 된다. 구현이 매우 간단하며 탐색 시 인덱스를 이용할 수 있어서 탐색속도가 월등하다는 장점이 있다. 따라서 탐색, 정렬을 자주 하는 경우엔 배열리스트를 사용한다. 해당 클래스에는 아래와 같은 메소드들이 저장되어 있다. 참고로 이 메소드들을 이용해서 Deque를 구현할 수 있다. 메소드 설명 int size() 배열의 크기 러틴 boolean isEmpt..

12. 상속

어떤 클래스 A의 field와 method를 어떤 클래스 B에게 상속해주면 클래스 B에서는 아무 제약없이 클래스 A에 있는 field와 method를 가져다 쓸 수 있다. 이런 관계를 상속관계라 부르며 A를 상위 클래스, B를 하위 클래스라고 부른다. 상속의 장점은 2가지가 있다. 하나는 코드의 중복이 감소한다는 것이고, 또 하나는 부모 클래스의 수정으로 모든 자식 클래스의 수정 효과를 볼 수 있다는 것이다. 사용 키워드는 extends로, 다음과 같다. public class B extends A{ ... } 단, 접근제한자가 private인 field와 method는 상속 대상에서 제외된다. 또한 부모, 자식 클래스가 서로 다른 패키지에 있다면 접근제한자가 default인 field와 method도 ..

간단 지식/Java 2020.06.25

11. Getter & Setter

OOP에서는 외부에서 객체 내부 data에 직접적으로 접근하는 것을 막는다. 이는 무결성을 깨지 않기 위함이다. 대신 메소드를 이용한 data 변경과 설정을 대안으로 두었다. 그게 바로 Getter와 Setter이다. Getter data read을 위해 메소드 이용 메소드로 필드값을 가공 후 전달 Setter data write를 위해 메소드 이용 메소드가 매개값을 검증 후 유효한 값만 수신 아래 코드는 Getter와 Setter의 예시이다. public class School{ private String name; private int num; public String getName(){ return name; } public int setNum(int name){ this.num = num + 10..

간단 지식/Java 2020.06.22

10. 접근제한자(public, protected, default, private)와 싱글톤

여러 패키지, 클래스를 이용한 프로그래밍을 하다보면 클래스 외부로부터의 접근을 제한할 필요가 느껴진다. 이 문제를 해결해주는건 바로 접근제한자들이다. 접근제한자 적용가능한 대상 외부에서 접근가능한 클래스 범위 외부에서 호출가능한 생성자 범위 public 클래스, 필드, 생성자, 메소드 모든 외부에서 접근 가능 모든 패키지에서 호출 가능 protected 필드, 생성자, 메소드 같은 패키지의 클래스 또는 자식클래스에서만 접근 가능 같은 패키지의 클래스 또는 자식클래스에서만 호출 가능 default 클래스, 필드, 생성자, 메소드 같은 패키지인 클래스에서만 접근가능 같은 패키지의 클래스에서만 호출가능 private 필드, 생성자, 메소드 모든 외부에서 접근 불가능 외부에서 객체 생성 불가능 클래스에 적용가능..

간단 지식/Java 2020.06.21

09. Package와 import

아직 대형 프로젝트를 접할 일이 없는 학부생이어서 그런지 패키지를 본격적으로 사용해본적은 없다. 패키지는 상위/하위 패키지 형식으로 조직될 수 있으며 패키지의 클래스의 이름은 상위패키지이름.하위패키지이름.class가 된다. 같은 패키지 내부에서는 아무 조건 없이 다른 클래스의 필드와 메소드를 가져다 사용할 수 있다. 하지만 다른 패키지의 입장에서 보면 얘기가 달라진다. 이름이 A인 패키지와 이름이 B인 패키지가 있다고 가정해보자. B 패키지에서 A 패키지의 Test클래스에 선언된 필드와 메소드를 사용하려면 어떻게 해야할까? 방법은 2가지가 있다. 1. 패키지 객체 생성 -> A.Test.필드명 = new A(); 2. import 사용 -> import A.Test; or import.A *; 이후 클래..

간단 지식/Java 2020.06.21

08. 정적멤버(static)와 final필드와 상수

정적 멤버란, 클래스에 고정된 멤버로 객체를 생성하지 않고도 사용할 수 있는 필드 또는 메소드를 말한다. 클래스 멤버라고도 부른다. 선언 방법은 일반적인 필드, 메소드 선언 앞에 static만 붙여주면 된다. 정적 멤버가 필요한 이유는 무엇일까? 바로 공용 데이터를 위해서이다. 예를 들어 수학 기호 파이의 값은 항상 3.14159.... 이다. 이런 값들은 객체가 굳이 가지지 않아도 되는 공용 데이터가 될 수 있다. 따라서 static double pi = 3.14159 로 선언하면 객체를 사용하지 않아도 가져다 쓸 수 있는 정적 필드가 된다. 마찬가지로 인스턴스 필드를 사용하지 않고 오로지 매개값만을 가지고 연산하는 메소드는 static으로 선언해줄 수 있다. 이런 정적멤버들을 외부에서 사용하려면 클래..

간단 지식/Java 2020.06.20

01. 재귀호출(Recursion)과 반복호출

재귀호출은 반복적으로 자기 자신을 호출하는 것을 말한다. 가장 친근한 예시로는 수학에서 찾아볼 수 있는데, 팩토리얼이나 피보나치가 있다. 재귀호출은 비선형 자료구조에 기반을 둔 알고리즘에 자주 사용이 된다. 예를 들어 tree 또는 graph의 노드 탐색이 있겠다. 재귀의 큰 특징은 종료 조건이 반드시 존재한다는 것이다. base case(최소한계)라고도 부르며 이것이 존재하지 않으면 시스템 스택에서 에러가 발생한다. 이 부분에 대해서는 밑에서 OS 관점에서의 재귀에 대해 설명하면서 다시 언급하겠다. 어쨋든 재귀는 하나의 큰 문제를 여러 개의 작은 문제로 쪼개어 해결한다는 점에서 Divide and Conquer(분할정복)이라 부를 수 있다. 재귀호출은 3가지로 분류된다. 1. Linear Recursi..

07. 클래스 - 필드, 생성자, 메소드

클래스 이름을 Test로 하고싶다면 우선 Test.java 파일을 생성해야한다. 그리고 public class Test{ } 라는 형태로 클래스를 선언해야한다. 한 파일에는 일반적으로 하나의 클래스를 선언해서 사용하지만, 추가로 클래스를 선언하는 것이 에러라는 건 아니다. 다만 추가로 선언할 클래스에는 public 키워드가 붙어서는 안된다. 어쨋건 java 파일을 컴파일하면 byte code file은 클래스의 개수만큼 생성된다. 클래스의 용도는 라이브러리용, 실행용으로 구분되는데 main 메소드가 있는 클래스를 실행용이라고 생각하면 된다. new 연산자를 이용하면 클래스로부터 객체를 생성할 수 있다. ex) Test test = new Test(); 이렇게 생성되는 객체는 Test클래스의 instanc..

간단 지식/Java 2020.05.29

06. OOP(Object Oriented Programming)의 특징

java는 객체지향프로그래밍(OOP)을 할 수 있게 해주는 언어이다. 그렇다면 객체에 대해서 우선적으로 알아야한다. 객체는 속성(field)과 동작(method)으로 구성되며, 각 객체는 다른 객체와 구별되는 독립적인 존재이다. 그리고 객체는 일반적으로 다수의 객체와 연결되어 조직되며 이러한 프로그래밍을 OOP라고 부른다. 객체 간의 관계는 집합,사용,상속 관계로 정의된다. 이렇게 객체들의 관계로 구성되는 프로그램, OOP의 특징은 대표적으로 아래 5개가 있다. 캡슐화 객체의 field와 method를 처리하는 함수를 하나로 묶어 세부내용은 은닉 객체의 재사용 용이 상속 이미 정의된 상위 클래스의 모든 속성, 연산을 하위 클래스에게 전달 단일 상속, 다중 상속 효율 상승, 개발시간 단축, 유지보수 용이 ..

간단 지식/Java 2020.05.28