목록분류 전체보기 (50)
손영배 블로그 누구나 쉽게 이해하고 습득하기
Java Virtual Machine JAM의 역할은 자바애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다. 그리고 JVM은 Java 와 OS사이에서 중개자 역할을 수행하여 Java가 OS에 구애받지 않고 재사용 가능하게 해준다. 그리고 가장 중요한 메모리관리, Garbage collection을 수행한다. 그리고 JVM은 스택기반의 가상머신이다. ARM 아키텍쳐 같은 하드웨어는 레지스터 기반으로 동작하는데 비해 JVM은 스택기반으로 동작한다. 왜 자바 가상머신을 알아야 하는가? 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해서가 그 답이 될지 모르겠다. 메모리 효율성을 위해 메모리 구조를 알아야 하기 때문이다. 동일한 기능의 프로그램이더라도 메모리 관리에 따라..
추상클래스와 인터페이스는 존재 목적이 다릅니다. - 추상 클래스의 존재 목적은 추상 클래스를 상속받아서(extends) 기능을 이용하고, 확장시키는데 있습니다. (개발 소스를 동일하게 하고 시간절약이 목적) - 인터페이스는 껍데기, 선언만 있고 내용은 없는 함수의 구현(implements)이 목적입니다. 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. ----> 그렇기 때문에 개발코드 내부구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 된다. 개발 코드가 직접 객체의 메소드를 호출하면 간단한데 왜 중간에 인터페이스를 두는지 의문점이 생긴다.? 그 이유는 개발 코드를 수정하지 않고, 사용하는 객체..
추상클래스의 개념 : 실체 간에 공통되는 특성을 추출한 것을 말한다. 예를 들어 새, 곤충, 물고기 등의 실체에서 공통되는 특성을 추출해보면 동물이라는 공통점이 있다. 이와 같이 실체들의 공통되는 특성을 가지고 있는 추상적인 것이라고 볼 수 있다. 그래서 공통적인 특성을 추출해서 선언한 클래스를 추상클래스라고 한다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고 추가적인 특성을 가질 수 있다. 여기서 특성이란 필드와 메소드들을 말한다. 추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다. 다시 말해서 추상 클래스는 new 연산..
인터페이스의 역할 자바에서 인터페이스(interface)는 객체의 사용 방법을 정의한 타입니다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는데 매우 중요한 역할을 한다. 인터페이스(interface)는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만을 알고 있으면 된다. 개발 코드가 직접 객체의 메소드를 호출하면 간단한데 왜 중간에 인터페이스를 두는지 의문점이 생긴다.? 그 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다. 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 ..
왜 제네릭을 사용해야 하는가? - 제네릭은 클래스, 인터페이스, 메소드를 정의할 때 타입(Type)을 파라미터(parameter)로 사용할 수 있도록 한다. - 타입 파라미터는 코드 작성 시 구체적인 타입으로 대체되어 다양한 코드를 생성하도록 해준다. 장점 - 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다. - 컴파일 시 강한 타입 체크를 할 수 있다. - 타입 변환(casting)을 제거한다. 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다. List list = new ArrayList(); list.add("hello"); String str = (String) list.get(0); // List에 저장되는 요소를..
public static int solution(int n) { int answer = 0; for (int i = 1; i < n / 2 + 1; i++) { int sum = 0; for (int j = i; j < n / 2 + 1 && sum < n; j++) { sum += j; if (sum == n) { answer++; break; } } } return answer + 1; } 1. 약간의 규칙을 찾아야 했으며 2. 1,2,3,4,~~ 5000(10000/2) ~~~ 10000의 범위에서 1,2,3,4,5,6,......4998 4999 5000를 아무리 반복하더라도 1억번이 채 걸리지 않기 때문에 그냥 이중 for으로 풀어야 한다는 생각을 햇어야 했다. 제길....!
DP(다이나믹 프로그래밍 ) 문제이며 점화식으로 생각하는 연습? botton - up 방식으로 생각하는 연습이 많이 필요할 꺼 같다. 시간초과의 문제가 있기 때문에 단순 반복이나 탐색으로 풀기 힘들기 때문에 -> 뭔가 규칙을 찾거나 DP로 풀 수 밖에 없다는 것은 느꼈지만 해결책을 못 찾앗따. 이럴 때 풀이를 보고 피드백을 받자 package Level2; import javax.jws.soap.SOAPBinding; public class 가장큰정사각형찾기 { public static void main(String[] args) { //int board[][] = { {0,1,1,1},{1,1,1,1},{1,1,1,1},{0,0,1,0} }; int board[][] = { {0,0,1,1},{1,1,..
HTTP HTTP는 웹상에서 Client와 Server간에 요청/응답 (request, response)으로 데이터를 주고 받을 수 있는 프로토콜입니다. 클라이언트가 HTTP프로토콜을 통해 Server에게 request을 보내면 서버는 요청에 맞는 응답 response을 Client에게 전송합니다. 이 때, HTTP 요청(request)에 포함되는 HTTP method는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용되는데!.... 이 HTTP메소드 중 GET, POST 방식의 특징과 차이점을 정리하자. GET 방식 GET은 서버로부터 정보를 조회(Select)하기 위해 설계된 메소드입니다. GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, QueryString을 통해 전..