Java

· Java
🧧 캐시와 캐싱성능을 좋게 만드는 방법을 대표하는 것들은 정말 다양하다. 오늘은 그 중 성능 향상에서 빠지지 않는 주제인 캐싱에 대해서 얘기를 해보려고 한다. 캐시란?캐시는 컴퓨터의 성능을 향상 시키기 위해 데이터를 임시로 저장해두는 장소를 뜻한다.캐싱은 캐시 영역로 데이터를 가져와서 해당 메모리에서 읽고 쓰는 작업하는 방식 그자체를 말한다.다른 의미는 메모리상에 있는 데이터를 연산하고, 이 연산을 더 빠른 CPU 메모리 영역으로 가져와 처리를 수행하는 것도 캐싱이다. ♬캐싱의 이점1. 어플리케이션 성능 개선In-Memory는 디스크보다 데이터를 읽는 속도가 훨씬 빠르기 때문에 훨씬 더 빠른 데이터 액세스는 어플리케이션의 전반적인 성능을 개선한다2. DB 비용 절감단일 캐시 인스턴스는 수십만 입출력 작..
· Java
인터페이스 Comparable 과 Comparator 우선 두 개에 대해 배우기 전에 공통점을 알아야한다. 이 두가지는 인터페이스라는 것이다. 인터페이스라는 것은 내부에 선언된 메소드를 반드시 구현해야한다는 것을 명심해야한다. 그렇다면 각각의 인터페이스에서 이 메소드를 가장 집중해서 알아보아야한다. Comparable은 CompareTo(T o) Comparator는 Compare(T o1, T o2) 이 메소드들이 해당 인터페이스들의 중요 메소드라고 볼 수 있다. 얘들은 뭐하는 애들일까? 이 두 인터페이스를 사용하는 이유가 뭘까? 물론 정렬을 할 때 굉장히 많이 사용하지만 중요한 건 따로 있다. 객체를 비교할 수 있다 기본적으로 같은 자료형은 부등호로도 충분히 쉽게 비교를 할 수 있다. 하지만 우리가 ..
인터페이스 추상메소드의 집합(인터페이스의 핵심 메소드) 추상메소드의 집합은 추상클래스도 똑같은거 아닌가? 그럼 인터페이스와의 차이가 무엇일까 추상클래스는 일반 클래스이다. 근데 메소드들 중 추상메소드를 가지고 있으니까 추상클래스가 되는것이다. 인터페이스는 오로지 추상메소드만 가지고있다.(구현된것이 아무것도 없다) 구현된것이 전혀 없는 설계도, 껍데기(모든 멤버가 public) interface 인터페이스이름 { public static final 타입 상수이름 = 값; 오로지 상수만 가질수있다. 변수, iv, lv모두 안된다. public abstract 메소드이름(매개변수목록); 추상메소드이다. } 인터페이스의 모든 멤버는 public이다. interface PlayingCard { public sta..
추상 클래스(abstract class) 미완성 설계도, 미완성 메소드를 갖고 있는 클래스 abstract class Player { abstract void play(int pos); abstract void stop(); } 추상 메소드가 클래스내에 존재한다면 그것은 추상 클래스이다. 그리고 abstract를 붙여주어야한다. 다른 클래스 작성에 도움을 주기 위한것. 인스턴스 생성 불가 Player p = new Player(); //에러 이것은 추상 클래스이기 때문에 인스턴스를 생성할 수 없다 그래서 상속을 통해 추상 메소드를 완성시켜야 인스턴스 생성이 가능하다 class AudioPlayer extends Player { void play(int pos) { // ... } void stop() {..
제어자 클래스와 클래스의 멤버(멤버 변수, 메소드)에 부가적인 의미 부여 접근 제어자 = public, protected, (default), private 그 외 = static, final, abstract, native, transient, synchronized, volatile, strictfp 하나의 대상에 여러 제어자를 같이 사용 가능하다.(접근 제어자는 하나만 사용 가능하다) public class ModifierTest { public static final int WIDTH = 200; public static void main(String[] args) { System.out.println("WIDTH="+WIDTH); } } 그 외 접근자 종류 제어자 대상 의미 static 멤버변수..
생성자 iv 초기화를 편하게 하기 위해 만든것 인스턴스가 생성 될때마다 호출되는 인스턴스 초기화 메소드 인스턴스 생성시 수행할 작업(iv 초기화)에 사용 생성자는 이름이 클래스 이름과 같아야 한다.(매개변수가 있던 없던 이름이 같으면 생성자이다) 리턴값이 없다 (void를 붙이지 않는다) - 항상 반환값이 없기때문에 붙이지 않는다. 모든 클래스는 반드시 생성자가 있어야한다. Card c = new Car(); 여기서 Car()가 생성자를 호출해주는것이다. (기본생성자) 기본 생성자 매개변수가 없는 생성자 클래스 이름() {} == 아무것도 적혀있지 않다 생성자가 하나도 없을 때만, 컴파일러가 자동 추가 만약 생성자가 하나이상 있는데 아무것도 적혀있지 않은 생성자가 없다면 오류가 발생한다. class Da..
오버로딩 하나의 클래스 안에 같은 이름의 메소드 여러개를 정의하는것 대표적인 오버로딩으로 println이 있다. println ( ) 안에 있는 타입을 자동적으로 인식하고 그것을 판별하여 출력한다 오버로딩이 성립하기 위한 조건 메소드 이름이 같아야한다. 매개변수의 갯수 또는 타입이 달라야한다. 반환 타입은 영향이 없다. int add(int a, int b) { return a+b; } int add(int x, int y) { return x+y; } 메소드 이름이 같다. 매개변수의 갯수와 타입이 같다. 타입은 상관없다 == 오버로딩이 아니다 int add(int a, int b) { return a+b; } long add(int a, int b) { return (long)(a+b); } 메소드 이..
스택(Stack) 박스를 쌓는것을 생각해보자 우리는 박스를 하나씩 차곡차곡 쌓일테고 꺼낼땐 가장 나중에 쌓은 상자를 빼면서 사용한다. 중간에 있는것은 뺄수 없다. 호출 스택 메소드 수행에 필요한 메모리 공간 메소드가 호출되면 호출스택에 메모리 할당, 종료되면 해제 예를 들어 가장 처음에 main메소드를 실행시키고 main안에 println이 있다면 main은 println을 호출한다. 그럼 스택에는 가장 밑에 main 그리고 main이 부른 println이 쌓이고 실행이 되면서 println이 빠져나오면서 println()이 종료된다. 그리고 남은 main도 종료가 되면서 빠져나오게 된다. 이로써 스택에는 아무것도 남아있지 않는것이다.
메소드란? 문장들을 묶어놓은것 장점 1. 코드의 중복을 줄일수 있다. 2. 코드의 관리가 쉽다. 3. 코드를 재사용할 수 있다. 4. 간결해서 이해하기 쉬워진다. 1. 중복된 코드의 간결화 작업단위로 문장들을 묶어서 이름을 붙여 사용한다. ( 중복 코드제거, 관리 용이, 재사용가능 ) public static void main(String[] args) { ... for( int i = 0; i < 10; i++ ) { numArr[i] = (int)(Math.random() * 10); } for(int i = 0; i < 10; i++) { System.out.printf("%d", numArr[i]); } System.out.println(); for(int i = 0; i < 10; i++) { ..
우리는 다양한 변수의 종류에 대해서 알아보았다 ..변수를 클릭하면 자세한 내용을 알 수 있다 이번엔 객체 지향에서 변수의 종류에 대해서 알아보자 선언 위치에 따른 변수의 종류 class Variables { int iv; static int cv; void method() { int lv = 0; } } 영역에 따른 변수는 종류가 정해져있고 이는 후에 객체 지향을 할때 굉장히 중요하게 작용한다. 영역은 크게 두개로 나뉜다.클래스 영역(iv)과 메소드 영역(lv) 클래스 영역 ( 클래스 영역은 변수 or 메소드선언만이 가능하다 ) iv = 인스턴스 변수 cv = 클래스 변수(static 변수, 공유 변수) - static이 붙어야만 한다. 메소드 영역 ( 메소드는 안에 내용이 적혀있지 않다면 선언한것이고,..
늦은산책
'Java' 카테고리의 글 목록