본문 바로가기

전체 글76

abstract class, Interface, generic 1. 추상 클래스 (확장의 개념) - abstract 클래스는 상속 전용의 클래스 - 구현의 강제를 통해 프로그램의 안전성 향상 - 메서드의 선언부만 남기고 구현부는 세미콜론(;)으로 대체 - 구현부가 없다는 의미로 abstract 키워드를 메서드 선언부에 추가 - 객체를 생성할 수 없는 클래스라는 의미로 클래스 선언부에 abstract를 추가 ※ Vehicle v = new DiselSuv(); 와 같이 하위 클래스의 객체 생성은 가능 - 반드시 자식 클래스에서는 추상 메서드를 오버라이딩 해야된다. package com.ssafy.day5.a_abstract; // 추상 클래스 (한개라도 추상 메서드가 있으면 추상클래스가 된다.) public abstract class Vehicle { private .. 2024. 1. 19.
데이터 은닉(Encapsulation), 다형성(Polymorphism), Singleton 1. 데이터 은닉 - 데이터를 보호하기 위해서 사용(마음대로 변경 X) - 변수는 private로 접근 막기 - getter, setter를 사용하여 변수 접근(public method) class UnbelievableUserInfo { // 데이터 은닉 private String name = "홍길동"; private int account = 10000; public void setName(String name) { // 데이터 보호 if (name != null) { this.name = name; } else { System.out.println("잘못된 이름 입니다."); } } public String getName() { return this.name; } public void setAcco.. 2024. 1. 18.
스택과 큐 1. 스택 - 삽입과 삭제 연산이 후입선출로 이뤄지는 자료구조 2. 큐 - 삽입과 삭제 연산이 선입선출로 이뤄지는 자료구조 3. 스택과 큐 코드 구현 public class Example { public static void main(String[] args) { Stack st = new Stack(); Queue q = new LinkedList();//Queue의 인터페이스 구현체인 LinkedList를 사용 st.push("0"); st.push("1"); st.push("2"); q.offer("0"); q.offer("1"); q.offer("2"); System.out.println("=== Stack ==="); while(!st.isEmpty()) { System.out.println(s.. 2024. 1. 17.
상속(Inheritance), overriding, package, import, 제한자 1. 상속 (is a) - 기존(상위) 클래스의 자산(멤버 변수, 멤버 메서드)을 자식(하위) 클래스에서 재사용하기 위한 것 - extends 키워드를 사용 ("자식 클래스명 extends 부모 클래스명 {}") - Object 클래스는 모든 클래스의 조상 클래스이다. - Object 클래스의 메서드 : hashCode(), equals(), toString() - 자바에서는 단일 상속만을 지원한다. >> 다중 상속을 하기 위해서는 interface와 포함 관계로 단점을 극복 - 포함 관계(has a) : 2개 이상의 클래스에서 특성을 가져올 때 하나는 상속, 나머지는 멤버 변수로 처리 ※ SpriderMan2는 Person이다(is a), SpiderMan2는 Spider를 가진다(has a) publ.. 2024. 1. 17.
투 포인터 1. 투포인터 - 2개의 포인터를 가진 알고리즘 - 시간복잡도 O(N) 2. 알고리즘 1) 시작, 끝 포인터 초기화 2) 투 포인터 이동 3. 슬라이딩 윈도우 - 투 포인터를 유지한 채 고정된 범위를 이동시키는 알고리즘(배열 크기 변화) - 시간 복잡도 O(N) 2024. 1. 16.
클래스, 객체, 메서드, 변수, 생성자 1. 객체지향 프로그래밍이란? - 객체 : 주체가 아닌 것, 주체가 활용하는 것 - 객체지향 프로그래밍 : 주변의 많은 것들을 객체화 해서 프로그래밍 하는 것 2. 객체지향 프로그래밍 장점 - 블록 형태의 모듈화된 프로그래밍(ex. 레고) - 신뢰성 높은 프로그래밍이 가능 - 추가/수정/삭제가 용이 - 재 사용성이 높다. 3. Class와 Object - 현실의 객체가 갖는 속성과 기능은 추상화되어 클래스에 정의된다. - 클래스는 구체화 되어 프로그램의 객체가 된다. - 설계도는 하나의 종류가 되고 설계도를 통해 나온 제품을 객체라고 부르며 주체가 사용 - 객체는 클래스를 데이터 타입으로 메모리에 생성되어 실제로 동장하는 것 4. 객체 생성 public class Person { // 객체의 속성, 데이.. 2024. 1. 16.
구간 합 1. 구간 합 - 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘 - 합 배열 : 기존의 배열을 전처리한 배열 - 합 배열을 사용하면 시간 복잡도를 O(N)에서 O(1)로 줄일 수 있다. - 합 배열 S를 만드는 공식 S[i] = S[i-1] + A[i] - A[2] ~ A[5] 구간 합을 배열로 구하는 과정 S[5] = A[0] + A[1] + A[2] + A[3] + A[4] + A[5]; S[1] = A[0] + A[1]; S[5] - S[1] = A[2] + A[3] + A[4] + A[5]; 2024. 1. 15.
배열과 리스트 1. 배열 - 배열은 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조 - 인덱스를 사용하여 값에 바로 접근 가능(빠르다) - 값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시킨다(느리다) - 배열의 크기는 선언할 때 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없다. - 구조가 간단하므로 코딩테스트에 자주 사용 2. 리스트 - 리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조이다. - 인덱스가 없으므로 값에 접근하려면 Head 포인터부터 순서대로 접근한다.(느리다) - 포인터로 연결되어 있으므로 데이터 삽입이나 삭제가 빠르다. - 선언 시 크기를 따로 지정하지 않아도 된다. (크기 변경 가능) - 구조가 복잡하다. 2024. 1. 15.
기본 문법, 배열 1. 변수 (Variable) - 자료를 저장하기 위한 메모리 공간 - 메모리 공간에 값을 할당 후 사용 2. 타입 - 기본형 : 미리 정해진 크기의 데이터 표현, 변수 자체에 값 저장 (ex. 10) - 참조형 : 크기가 미리 정해질 수 없는 데이터의 표현, 변수에는 실제 값을 참조할 수 있는 주소만 저장 (ex. int 나이 = 10) 3. 기본형의 크기 - 논리형 (boolean) - 정수형 (byte) : 8bit - 정수형 (short) : 16 bit - 정수형 (int) : 32bit (기본) ※ 정수 계산시 오버플로우 주의 - 정수형 (long) : 64bit - 실수형 (float) : 32bit - 실수형 (double) : 64bit (기본) System.out.println(((in.. 2024. 1. 15.