본문 바로가기

Java

(13)
[Java] 이것이 자바다 - 상속 상속이란? 현실에서 상속이란 부모가 자식에게 물려주는 행위를 말한다. 객체 지향 프로그래밍에서도 상속이 존재하는데 자식 클래스가 부모클래스를 상속받음으로써 부모클래스가 갖고 있는 필드나 메서드를 사용할 수 있다. 이러한 특성 덕분에 상속을 사용하면 코드의 중복을 줄여 개발 시간을 단축시키므로 매우 효율적이다. 부모클래스를 상속받는다고 해서 모든 필드와 메서드를 사용할 수 있는 것은 아니다. 부모클래스에서 접근제어자가 private인 필드나 메서드는 상속 대상에서 제외되며 부모클래스와 자식클래스가 다른 패키지에 존재하는 경우 default 접근제어자도 상속대상에서 제외된다. 클래스 상속 상속을 사용하는 방법은 아래와 같이 자식클래스의 extends 뒤에 부모클래스를 적으면 된다. 자바에서는 다중 상속을 허..
[Java] 인접행렬, 인접리스트 알고리즘 문제 풀면서 그래프를 구현할 때 Input 값에 따라 인접행렬과 인접리스트 중 어떤 걸 사용할지 정했었는데 시간복잡도와 메모리 측면에서 정확하게 어떤 상황에서 어떤 방법을 사용해야 하는지 알아보기 위해 구현방법과 개념을 정리하려고 합니다. 인접행렬 인접 행렬(Adjacency Matrix)방식은 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식으로 자바에서는 아래와 같이 구현하여 사용할 수 있다. /* 5 7 1 2 1 3 1 4 2 3 2 5 3 4 4 5 */ public class 인접행렬 { public static StringTokenizer st; public static int[][] graph; public static void main(String[] args) throws ..
[Java] 정적 멤버와 static 개발하거나 알고리즘 문제 풀면서 객체를 생성하지 않고 변수나 메소드를 바로 사용하고 싶을때 static 키워드를 붙여서 사용하곤 했는데 정확한 이해없이 사용하고 있는 것 같아서 책보면서 정리해보려고 합니다. static은 정적인, 고정된 이라는 뜻을 가지고 있다. 그렇기 때문에 static 변수나 메소드를 정적 변수, 정적 메소드라고도 부른다. 또한 정적 변수와 정적 메소드를 포함하는 정적 멤버의 경우 객체에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스 멤버라고 부른다. 정적 멤버 선언 정적 멤버 선언은 아래와 같이 static 키워드를 붙여서 선언할 수 있다. public class 클래스명 { // 정적 변수 public static 타입 변수명 [= 초기값]; // 정적 메소드 pu..
[Java] final 필드, 메소드, 클래스 final 키워드 final은 최종적, 마지막이라는 뜻을 갖고 있다. 이 final 키워드는 자바에서 변수, 메소드, 클래스에 선언되어 특별한 의미를 부여해준다. final 변수 변수에 final 키워드가 선언되면 해당 변수가 생성될때 초기값이 정해지고 다시는 수정될 수 없음을 의미한다. final 변수는 다음과 같이 선언된다. final 타입 필드 [= 초기값]; 초기값은 변수 선언 시에 주는 방법과 생성자에서 주는 방법이 있다. 단순한 값이라면 변수 선언 시에 주면 되지만 복잡한 초기화 코드가 필요하거나 객체 생성 시 외부 데이터, 즉 파라미터에 의해 정해지는 경우에는 생성자에서 초기값을 지정해주어야 한다. 만약 final 변수를 선언만하고 생성자에서 값을 초기화 해주지 않는다면 컴파일 에러가 발생한..
[Java] 이것이 자바다 - IO 패키지 IO 패키지란? 프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번히 일어나는데 자바의 기본적인 데이터 입출력 API는 java.io 패키지에서 제공하고 있다. 이때 프로그램이 출발지냐 또는 도착지냐에 따라서 입출력 스트림의 종류가 결정되는데 프로그램이 데이터를 입력받을 때는 입력 스트림이라고 부르고 프로그램이 데이터를 보낼 때에는 출력 스트림이라고 부른다. java.io 패키지에서 제공하는 스트림의 종류는 크게 두 가지로 구분된다. 하나는 바이트 기반 스트림이고 다른하나는 문자 기반 스트림이다. 바이트 기반 스트림은 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 주고 받을 수 있으나 문자 기반 스트림은 오로지 문자만 주고 받을 수 있다. 바이트 기반 스트림과 문자 기반 스트림은 ..
[Java] 이것이 자바다 - 스트림(Stream) 스트림이란? 스트림(Stream)은 자바 8부터 추가된 문법으로 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. Stream이 추가 되기 전인 자바 7 버전까지는 List 컬렉션에서 요소를 순차적으로 처리하기 위해 아래와 같이 Iterator 반복자를 사용했었다. public class StreamTest { public static void main(String[] args) { List nameList = new ArrayList(); nameList.add("홍길동"); nameList.add("스프링"); nameList.add("스트림"); Iterator iterator = nameList.iterator(); while (iterator.hasNext()..
[Java] 이것이 자바다 - 제네릭 제네릭이란? 제네릭이란 자바의 타입 안정성을 맡고 있으며 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 해결할 수 있게 도와준다. 또한 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미치는데 아래 예시와 같이 제네릭을 사용하면 List에 저장되는 요소를 String 타입으로 국한하기 때문에 타입 변환을 할 필요가 없어 프로그램 성능이 향상된다. // 제네릭을 사용하지 않을 경우 List list = new ArrayList(); list.add("hello"); String str = (String) list.get(0); // 제네릭을 사용할 경우 List list = new ArrayList(); list.add("hello"); Stirng str = list.g..
[Java] 이것이 자바다 - 멀티 프로세스, 멀티 스레드 운영체제 운영체제란 하드웨어와 소프트웨어를 관리하는 일꾼으로 아래와 같은 역할을 한다. CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리 메모리 관리 : 한정된 메모리를 어떤 프로세스에 얼마큼 할당해야 하는지 관리 디스크 파일 관리 : 디스크 파일을 어떠한 방법으로 보관할지 관리 I/O 디바이스 관리 : 마우스, 키보드 같은 I/O 디바이스들과 컴퓨터 간에 데이터를 주고받는 것을 관리 멀티 프로세스란? 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 부른다. 멀티 프로세스는 애플리케이션 단위의 멀티 태스킹을..