분류 전체보기 439

자바 30강. JSON

자바 스크립트를 잠깐 언급하고 가자. let : 변수를 초기화하거나 선언할 때 쓰는 키워드 (자바의 자료형과 다름) let n = 10; let s = "문자열"; let ss = '문자열'; 문자열을 초기화할 때 홑 따옴표도 가능하다. 타입 자체가 없기 때문에 제네릭 같이 리턴 타입을 생각할 필요도 없고, 초보 개발자들이 사용하기에 좋은 언어이다. 이 언어가 오브젝트를 선언할 때 (커스텀 자료형) let user = {// 클래스 이름 모두 소문자 name : "홍길동", age : 60 } new를 하지 않아도 모든 게 heap에 들어간다. 데이터의 사이즈를 모르고, 동적이기 때문이다. user.name으로 변수를 찾을 수 있다. 자바의 오브젝트 (커스텀 자료형) class User { // 처음에 ..

JAVA 2022.01.21

자바 29강. 컬렉션(HashSet)

HashSet과 ArrayList를 사용하는 것과 동일하다. HashSet에 제네릭을 int로 지정하면 오류가 발생할 것이다. HashSet에 컨트롤 + 클릭해보면 제네릭은 클래스 타입이기 때문에 기본 자료형은 오류가 나는것이다. 이때 Wrapper 클래스를 사용해주면 오류를 해결할 수 있다. Wrapper 클래스 : 기본자료형의 클래스화 기본 타입 래퍼 클래스 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean int대신 Integer을 넣으면 오류가 나지 않는다. 이제 HastSet에 add( ) 메서드를 이용해 데이터를 넣어보자. package ex22; import ja..

JAVA 2022.01.20

자바 28강. 컬렉션(ArrayList)

자료구조는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다. 클래스로 자료구조를 표현한 것 큐를 만들면 먼저 넣은 게 먼저 나오도록, 스택을 만들면 먼저 넣은 게 마지막에 나오도록 표현한 것을 말한다. 자주 쓰는 자료구조에 대한 메서드의 집합을 컬렉션(collection)이라고 한다. 컬렉션의 기본은 연결 리스트(Linked-list)이다. 리스트의 첫 번째 데이터에 접근하면 메모리의 다음칸으로 넘어가는 것이 아닌 링크를 이용하여 두 번째 데이터가 저장되어있는 곳으로 간다. 동적으로 데이터를 추가할 수 있다. 데이터를 추가하는 것뿐만..

JAVA 2022.01.20

자바 27강. 제네릭

제네릭(Generic) 프로그래밍 : 데이터 타입을 일반화하는 것 구체적인 타입을 적지 않고 변수 형태로 적어놓는 것을 말한다. 사과박스 설계도를 만들고 내용은 똑같은, 사과가 아닌 물을 담는 박스 설계도를 또 만드는 것은 요청할 때마다 메서드를 만드는 것과 같아서 메서드가 100개, 1000개 필요이상으로 많아질 것이다. 그렇다면 같은 메서드로 타입이 다른 것들을 리턴할 수는 없을까? public 사과 응답( ) { // return값이 사과타입 if(사과요청) { return 사과; } else if (딸기요청) { return 딸기; } } 이 코드가 가능할까? 통신은 정확한 타입을 리턴해야한다. 데이터를 요청하면 메서드가 실행되는데 메서드의 return 타입을 if문을 사용해 바꿀 수는 없다. 응..

JAVA 2022.01.20

자바 26강. 컴포지션

상속을 사용하지 않고 객체를 사용하는 방법을 알아보자. package ex11; class 엔진 { int power = 5000; } class 소나타 extends 엔진 { } public class CompositeEx01 { public static void main(String[] args) { } } 소나타 클래스에서 power값을 쓰고 싶어서 엔진을 상속받았다. 문법적으로 틀린 건 없지만 다형성이 성립되지 않을 때 상속을 사용해선 안된다. 이때 데이터를 물려받는 것이 아닌, 재사용하는 방법이 있다. 다른 객체를 받아들여서 그 객체의 기능을 사용하는 것이다. 받아들인 객체의 자원(메서드, 변수)을 사용할 수 있다. 소나타 클래스는 엔진 클래스가 가진 power 변수를 사용하고 싶을 때, 엔진 ..

JAVA 2022.01.20

자바 25강. Super

자바에서는 super(키워드)가 부모, this가 자신을 뜻한다. this : 자기 자신의 heap 메모리 공간 클래스를 new 하기 전에 나중에 메모리에 뜰 heap 공간을 가리킨다는 말이다. 그럼 new를 하는 시점에 this는 메모리에 뜬 내 heap공간을 가리키게(바인딩) 된다. super : this와 마찬가지로 클래스를 new하기 전에 나중에 메모리에 뜰 부모의 heap 공간을 가리킨다는(바인딩) 말이다. + super는 extends를 했을 때만 사용이 가능하다. 자식을 new할때 상속되어있는 부모도 같이 메모리에 뜨고 부모의 생성자도 실행된다. 부모가 디폴트 생성자가 아닌 매개변수를 받는 생성자일 때 오류가 생긴다. 이때는 생성자 오버로딩을 해줘야 오류가 잡힌다. 실행하면 그냥 디폴트 생성..

JAVA 2022.01.20

자바 24강. String

은행의 A 컴퓨터와 홍길동의 B 컴퓨터가 통신을 할 것이다. 통신을 할 때 너무 길게 보내면 데이터가 무거워진다. 자연어 상태로 보내게 되면 컴퓨터는 이해할 수 없다. 컴퓨터가 이해하기 쉬운 데이터로 분석하는 파싱을 해주어야 한다. 경량 데이터를 보내려면 프로토콜을 만들어 경량화를 해두어야 한다. 자연어로 보내면 파싱이 안되기 때문이다. 자연어가 아닌 프로토콜을 지킨 상태로 보내야 파싱 할 수 있다. 누가 봐도 이해하기 쉽게 보내야 한다. 송신자 : 계좌번호 : 수신자 : 계좌번호 : 금액이라는 프로토콜을 정했고 홍길동은 계좌이체를 하기 위해 프로토콜에 맞추어 홍길동 : 10333377 : 장보고 : 1123333557 : 5000이라고 요청을 했다. Byte Stream으로 들어오는 통신은 모두 문자열..

JAVA 2022.01.20

자바 23강. SRP

객체 지향의 핵심 5가지 중 2가지를 배웠다. 1. 상태는 행위를 통해 변경한다. 2. DIP(의존성 역전의 원칙) 오늘은 5가지 중 3번째, SRP에 대해 알아보자. SRP 단일 책임의 원칙 (Single Responsibility Principle) 객체는 객체들끼리 협력함 -> 프로그램이 만들어짐 = 부품이 결합되는 것처럼 프로그램 만들기 편함 협력의 관계는 DIP를 지켜야한다. 추상적인 것을 바라보고 협력해야 한다. 서로 메시지를 교환하며 협력한다. 메시지를 전달하는 행위를 메서드 호출이라고 한다. 어떤 특정 객체가 가지고 있는 메서드를 책임이라고 한다. 객체들 간의 협력, 메시지 교환, 책임이 객체 지향의 3요소이다. 프로그램 설계를 위해 srp를 배우는 것이 아닌, srp로 설계된 코드를 보고..

JAVA 2022.01.20

자바 22강. 인터페이스

모니터 암을 만드는 회사는 모니터 베사홀의 크기 규격을 맞춰 만들어야 한다. 이게 인터페이스이다. 인터페이스는 프로토콜과 비교된다. 프로토콜이 합의하에 만들어지는 수평적인 약속이라면, 인터페이스에는 갑과 을의 관계가 나누어져 갑이 정한 규칙을 을에게 강제로 알려주는 수직적인 약속이다. 모니터를 만드는 업체가 모니터 암을 만드는 업체에게 강제성을 부여한 것이다. 그렇다면 인터페이스를 행위에 대한 강제성 때문에 사용할까? 그건 추상 클래스를 통해서도 가능하다. 추상화를 사용한 프로그램을 살펴보자. 자동차 설계도를 보면 모든 자동차는 바퀴 4개, 엑셀 1개, 브레이크 1개를 가지고 있고, 그리고 모든 자동차는 전진, 후진, 멈춤의 행위만 한다. 바퀴 4개, 엑셀 1개, 브레이크 1개는 공통적인 것이기 때문에 ..

JAVA 2022.01.18

자바 21강. 싱글톤 패턴, pooling 기법

패턴 -> 디자인 패턴 -> 설계도를 패턴으로 만들까? 설계도를 만들어 놓으면 누구나 동일하게 만들 수 있다. a( ) 메서드에서 사자 클래스를 호출하기 위해 new를 사용하여 heap공간에 띄웠다. 이후 a( )가 종료되면 heap에 저장되어 있는 사자 데이터들이 사라지는 것이 아닌, 사자 데이터들을 가리키는 주소 값 s가 사라지게 된다. 그러면 heap의 사자는 어떻게될까? 가비지 컬렉션이 되어버린다. a( )에서 만들어놓은 사자 데이터를 b( )와 c( )에서 사용하고 싶은데, 대부분의 신입사원들은 필요할 때마다 사자 클래스를 new를 하여, 띄워져 있는 사자를 공유하지 않고 heap공간에 매번 새로운 데이터를 띄울 것이다. 카페에서 손님 한 명 올 때마다 커피 머신을 돈 주고 사서 커피 한잔 뽑고..

JAVA 2022.01.18