🚀 다형성에서 빠질 수 없는 개념 추상화는 어떠한 객체에 대한 공통 요소를 추출하는 과정 으로 배웠다. 그러나 구체적인 행위를 구현하는 것이 아닌 메소드의 이름만 명시하고 하위 클래스에서 그 행위를 구현하도록 JAVA는 약속했다. 이렇게 행위를 구현화 하는데 필요한 절차가 오버로딩 , 오버라이딩 이라고 하는 것이다. 🌠 오버라이딩 Ride : (말, 자동차 등에) 타다 오버라이딩에 대해서는 상속과 추상화를 배웠다면 익숙한 어노테이션 일것이다. 상위 클라스의 추상메소드를 하위 클라스에서 구체화하는 과정으로 이해하면 충분하다 생각한다. abstract class Animal { void sound() {} } class Dog extends Animal { @Override public void sound(..
목차 내부클래스 내부 클래스의 종류 익명 클래스 내부클래스 내부 클래스안 하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다. 이러한 내부 클래스는 외부 클래스에 대해 두 개의 클래스가 서로 긴밀한 관계를 맺고 있을 때 선언 가능하다. 외부 클래스 내부의 각각의 내부 클래스의 멤버들 간의 접근이 자유로우며 불필요한 클래스를 감춰서 코드 복잡성을 줄일 수 있다. 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있다. 서로 관련 있는 클래스를 논리적으로 묶어서 표현함으로써, 코드의 캡슐화를 증가 외부에서는 내부 클래스에 접근할 수 없으므로, 코드의 복잡성을 줄일 수 있다. class OutterClass{ class InnerClass{ } } 내부 클래스의 종류 정적 클래스 인스턴스 클래스 지역..
👱♀상속를 공부하면 따라오는 것 객체 지향 프로그래밍(OOP)의 특성 중 하나인 상속은 상위 클라스의 기능을 하위 클라스 에서도 가능하도록 부여받는 것으로 확장성, 유연성, 재사용성의 기능을 높여준다. 상속을 공부한다면 추상화를 볼 수 있을 것이고 인터페이스를 공부하게 될 것이고 오버라이딩, 오버로딩 까지 같이 공부하게 된다. 나는 두 기초적인 지식에서 정리가 되지 않았고 이번 기회로 정리하고자 한다. 🚀 abstract 추상 클래스를 알기 전에 추상화에 대한 오해를 풀고 가자 ☄ 추상화 JAVA에서 추상화는 특별한 용어는 아니다. 그저 국어 표현에서 말하는 추상은 실체 간에 공통되는 특성을 추출한 것으로 정리되는 할 수 있는데 개발자가 어떤 객체의 공통되는 특성을 뽑아내어 하나의 공통 객체로 만들어 ..
🚀 프로그램이 메모리를 사용하는 방식 하나의 프로그램이 실행될 때 프로그램이 메모리를 사용하는 방식이다. 기계어를 포함한 모든 프로그래밍이 언어의 공통된 메모리 사용방식이며 OOP에서는 데이터 저장 영역을 다시 3개의 영역으로 나누어 사용한다. 🌠 main() 메소드 : 메소드 스택 프레임 자바가 실행되면 JRE는 프로그램 내부의 main() 메소드의 유무를 확인하고 이어서 JVM이 역할을 이어 받아 전저리 과정을 이어간다. 프로그램이 실행되면 JVM은 실행에 필요한 패키지(ex. java.lang)를 Static 영역에 저장한다. 그리고 JVM은 개발자가 작성한 모든 클래스와 패키지 역시 Static영역에 저장한다. ☄ main() 메소드가 실행되기 전 JVM에서 수행하는 전처리 작업들 java.lan..
🚀 자바의 구성 우리가 자바를 다루면서 자바가 어떻게 운영되는지 확인할 필요가 있다. 자바의 최대 장점으로 JVM이 설치되어 있는 어느 운영체제라도 JDK를 사용할 수 있다 알고있다. 우리는 여기서 더 자세하게 알고 들어갈 필요가 있다. 🌠 JVM(Java Virtual Machine) 자바 바이트코드를 실행할 수 있는 스택 기반의 가상 머신을 구현한 소프트웨어이다. JVM의 역할은 JAVA Application을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실할하게된다. 때문에 JAVA와 OS에서 중계 역할을 하여 JAVA가 OS환경에 구애받지 않고 실행을 가능하게 해준다. 또한, 메모리 관리, GC(Garbage collection)을 수행한다. 🌠 JDK(Java Development kit)..
🚀 Lambda 의 등장 기술이 발전되어 가면서 커져만 가는 데이터를 처리한 방법을 필요로했고 이를 필요로 하는 CPU 의 성능 향상이 필요하게 되었다. 이후 CPU에 멀티 코어가 등장하게 되면서 모든 데이터를 빠르게 처리하기 위해 모든 코어를 동원할 수 있는 기술을 개발하게된다. 그렇게 JAVA 8에서 새롭게 등장한 병렬화 개념이 등장했고 동시에 Collection (Map / Set / List)가 더욱 강화 되었다. 이러한 컬렉션 기능을 더욱 효울적으로 사용하기 위해 등장한 함수형 프로그래밍이 오늘의 주제인 Lambda인 것이다. 그래서 람다식이란? 스프링을 위한 자바 객체 지향의 원리와 이해 에서 정의한 람다식 이란? 코드 블록을 위해 메서드를, 메서드를 사용하기 위해 익명 객체를 만드는 복잡함을..
🚀 Stream 이란? 데이터의 흐름을 정의가능한 API로 Collection을 함수로 정의할 수 있다. java8 에서 추가된 API 데이터를 다루는 영역에서 강한 측성을 보임 데이터를 처리하기 위한 내부반복을 통해 정렬 / 필터링 기능 제공 🌠 특징 ✔ 병렬 처리에 유리 병렬 처리를 위해 common fork join pool을 사용하는 parallel() 메소드 제공 common fork join pool 각 스레드가 개별 큐를 가지고 있으며, 놀고 있는 스레드가 있으면 일하는 스레드의 작업을 가져와 수행하여 최적의 성능 도출 코어의 수가 많을수록, 처리할 데이터 수가 많을수록, 데이터당 처리 시간이 길수록 병렬 처리 성능 향상 배열, ArrayList 사용 시 유리(LinkedList는 순차 진행..
Vector vs ArrayList vs LinkedList 특징 List 컬렉션의 하위 목록으로 객체를 일렬로 나열하는 구조이다. 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인텍스가 부여되고 인텍스로 객체를 검색, 삭제 기능까지 가능하다. 1. Vector ArrayList와 동일한 내부구조를 가지고 있느며 선언하는 방식 또한 유사하다. Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드를 실핼 할 수 없고, 하나의 스레드가 완료된 후에야 다음 스레드를 작동 할 수 있다. 즉, 스레드 안정성이 보장이 되는 것이다. 2. ArrayList List 인터페이스의 구현 클래스로 인덱스로 관리한다는 점에서는 배열과 유사하지만 배열 크기가 개변적이라는 점에서 차이를 ..
public static void main(String[] args){} 모든 프로세스는 main() 명령어로부터 시작되는데 이는 main()을 선언 하는 것으로 Thread를 작동시키는 것을의미한다. 그렇다면 String[] args의 의미는 무엇일까? 1. 의미 String[] args 의 문장을 보면 마치 String 배열의 변수를 선언하는 형태와 같다. 이는 초기 도스에서 JAVA를 컴파일 할 경우 > javac HelloWorld.java // java 컴파일 생성 명령어 > java HelloWorld //java 컴파일 실행 입력하면 클래스가 작동되지만 추가적인 입력이 필요한경우 (Scanner , InputStreamReader 선언시) > java HelloWorld 안녕하세요!! hel..
- Total
- Today
- Yesterday
- springboot
- 면접
- security
- kakao
- Algorithm
- JPA
- 매트랩
- 스프링부트
- ajax
- CS
- 백준
- 자바
- OOP
- 자격증
- C언어
- 알고리즘
- Spring
- 프로그래머스
- 릿코드
- 디자인패턴
- Solid
- nginx
- Matlab
- spring-cloud
- 그래프
- 스프링
- java
- interview
- docker
- 수학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |