1. 자바란 무엇인가?
객체지향 프로그래밍 언어입니다. 다른 언어와 비교하여 자바의 가장 큰 특징은 운영체제 없이 독립적이라는 점입니다. 즉 운영체제에 관계없이 같은 코드를 사용 가능한데, OS위의 JVM(Java Virtual Machine) 이라는 가상머신 위에서 자바가 실행되기 때문입니다. Garbage Collector라고 불리는 데몬 쓰레드에 의해 자동으로 메모리가 관리됩니다. 

객체지향 언어의 특징을 3가지만 설명해보세요.
상속 추상화 캡슐화 다형성
추상화 : 
객체들의 공통적인 특징을 뽑아내는 것입니다. 객체들의 공통적인 데이터와 기능을 도출하는 것을 말합니다. (ex) class )
캡슐화 : 
객체가 맡은 역활을 수행하기 위한 하나의 목적을 위해 데이터와 기능들을 묶는 것을 말합니다 
상속 :
새로운 클래스가 기존의 클래스의 자료와 연산을 이용하게 해주는 것
다형성 :
한 요소에 여러 개념을 넣어 놓은것 (오버라이딩, 오버로딩)

3. 오버로딩 vs 오버라이딩
부모 클래스에게 상속받은 메소드를 자식 클래스에서 재정의 하는 것입니다.
하나의 클래스 내에서 이름이 같은 여러개의 메서드를 정의하는 것입니다. parameter, 리턴 타입 등이 다른데 수행 내용이 본질적으로 동일할 때 사용합니다.

5. mvc 패턴
애플리케이션을 Model, View, Controller 영역으로 구분하여 개발합니다. 영역간의 결합도를 최소화한 디자인 패턴입니다. 장점은
디자이너, 개발자 영역이 분리됨으로써 분업화가 쉬워지며,
유지보수가 용이합니다.

4. 세션, 쿠키
웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.
Session : 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.  Session에 관련된 데이터는 Server에 저장된다.  웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.  Cookie에 비해 보안성이 좋다.
Cookie : 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법. 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다. Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다. Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능, Session보다 보안성이 낮은 이유)
모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 가기 때문이다.

9. 쓰레드 프로세스
Process(프로세스)  – 운영체제에서 실행중인 하나의 프로그램(하나 이상의 쓰레드를 포함한다.)
Thraed(쓰레드)      – 프로세스내에서 동시에 실행되는 독립적인 실행 단위를 말함. 

10. non-static 멤버
멤버는 객체마다 별도로 존재한다. 객체 생성 시에 멤버가 생성된다. 공유되지 않는다.
static 멤버
멤버는 클래스당 하나가 생성된다., 클래스 로딩 시에 멤버가 생성된다., 동일한 클래스의 모든 객체들에 의해 공유된다.



6. 인터페이스, 앱스트랙트
Interface
오직 추상 메소드와 상수만을 멤버로 갖는다
Implements 키워드를 사용한다
인터페이스 안의 모든 추상 메소드를 구현해야 한다.
해당 인터페이스를 구현한 객체들에 대해서 동일한 동작을 약속하기 위해 존재

Abstract
Abstract가 붙거나, 추상 메소드를 하나 이상 가진 클래스
실체클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상클래스라고 한다
메서드와 내용이 추상적이기 때문에 객체를 생성할 수 없다.
공통된 필드와 메서드를 통일할 목적
즉, 추상 클래스를 상속받아 그 기능을 이용하고 확장하는 데 목적이 있다.

공통점 : 인스턴스(객체)는 생성할 수 없다., 선언만 있고 구현 내용이 없다. 사용하기 위해 하위클래스에서 구현해야 한다.
차이점 : 추상 클래스는 상속을 통해 기능을 확장하려는 목적으로 사용하며, 인터페이스는 해당 인터페이스를 구현한 객체들에 대해 동일한 동작을 약속하게 하기 위해서 사용합니다. 이 외에 추상클래스는 다중상속이 불가능하고 인터페이스는 가능하다

11. ==, equals()
==는 주소값 비교, equals는 값 비교


7. Call by Reference와 Call by Value의 차이
Call by Value (값에 의한 호출)
함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
함수 호출시 인자로 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
복사된 인자는 함수 안에서 지역적으로 사용되는 local value의 특성을 가진다.
따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되지 않는다.
Call by Reference (참조에 의한 호출)
함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다. (해당 변수를 가르킨다.)
따라서 함수 안에서 인자의 값이 변경되면, 인자로 전달된 변수의 값도 함께 변경된다. 

8. 프레임워크
소프트웨어를 만들 때 뼈대가 되는 부분을 미리 구현한 클래스, 인터페이스, 메서드 등의 모음입니다.
장점은
미리 구현해 둔 코드를 쓰기 때문에 빨리 만들 수 있고,
품질이 보장되어 있고,
추상화 계층을 하나 제공하는 것이 되어 사용하기 쉽습니다.
단점은
이것 자체도 익숙해 지는데에 시간이 걸릴 수 있고,
프레임워크 내부를 커스터마이징 하기 힘들고, 즉 유연성이 부족합니다.
언어가 아닌 프레임워크를 배우게 된다는 부작용이 있습니다.

15. 자바에서 쓰레드를 구현하기 위한 2가지 방법을 간단하게 설명하시오.
lang 패키지내에 구현되어있는 Thread 클래스를 상속받거나 Runnable 인터페이스를 상속받아 run 메소드를 재정의하여 구현합니다.

12. String, stringbuffer
String은 불변의 객체입니다. 한번 String name =”길동”; 라고 선언하게 되면 먼저 String 객체타입인 name이라는 인스턴스를 만들고 메모리에 “길동”을 올려버립니다. 그리고 name이 “길동”을 참조하는 레퍼런스가 되는 것입니다.
name = name + “홍”; 구문이 실행될 때 실제로는 스트링 버퍼를 새로 생성해서 name이 가리키는 “길동”을 만들어주고 스트링 버퍼의 append 함수를 이용하여 “홍” 를 붙여줍니다. 그렇게 완성된 스트링 버퍼값을 메모리에 올리고 name은 다시 이 값을 참조하게 됩니다.
그와중에 생겨난 메모리 안의 “길동” 이라는 값과 “홍”라는 값은 가비지 컬렉터가 가지고 있다가 필요없어서 버립니다.

13. 접근제어자(access modifier)
접근제어자는 객체지향 프로그래밍에서 클래스의 멤버 변수 또는 메소드에 설정하는 키워드로 접근 영역을 제한하는데 사용합니다. 
Public – 접근 제한이 없다.(같은 프로젝트 내에 어디서든 사용 가능)
Protected – 같은 패키지 내, 다른 패키지에서 상속 받아 자손 클래스에서 접근 가능
Default – 같은 패키지 내에서만 접근 가능
Private – 같은 클래스 내에서만 접근 가능


17. jsp, servlet
Jsp : html 소스코드 속에 자바코드가 들어가는 구조를 갖는 웹 어플리케이션 프로그래밍
Servlet : container가 이해할 수 있게 순수 자바코드로만 이루어진 것
Web container : 웹 서버에서 전달받은 jsp파일을 서블릿으로 변환하여 서블릿의 결과를 웹 서버에게 전달하는 것

16. jvm
Java virtual machine의 약자. 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것. JAVA와 OS의 중개자 역할을 하여 OS에 관계없이 똑같이 실행됩니다.
Garbage collector 를 통한 자동적인 메모리 관리, 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해서 사용한다.
JVM은 많은 메모리를 사용하고 실행속도 또한 빠르지 않습니다. 또 바이트 코드를 완전한 기계코드로 변환하는 과정에서 일반적인 컴파일 언어보다 속도가 많이 느리다는 단점이 있습니다.
실행과정
1.프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
2. 자바 컴파일러(javac)가 자바 소스코드(java)를 읽어들여 자바 바이트코드(class)로 변환시킨다.
3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.
4. 로딩된 class파일들은 Execution engine을 통해 해석된다.
5. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어지게 된다.

동기화와 비동기화의 차이(Syncronous vs Asyncronous) 
Sync : A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다.
Async : 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
동기방식은 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 하는 단점이 있고, 
 비동기방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있는 장점이 있습니다.

DML vs DDL
DML : 데이터베이스에 들어있는 데이터를 조회하거나 검색하기 위한 명령어(select, update, insert, delete)
DDL : 테이블 구조를 정의하는 데 사용되는 명령어(create, alter, drop)
18. 클래스, 객체, 인스턴스
클래스(Class)
객체를 만들어 내기 위한 설계도
객체(Object)
소프트웨어 세계에 구현할 대상, 클래스에 선언된 모양 그대로 생성된 실체 
즉, 메모리에 할당된 실체화된 인스턴스를 ‘객체’라고 부른다. ,클래스의 인스턴스(instance) 라고도 부른다.
인스턴스(Instance)
클래스로부터 만들어진 객체, 실체화된 인스턴스는 메모리에 할당된다. 

JDK, SDK
개발을 위한 클래스, 컴파일러, 실행 및 배포도구를 포함하여 개발을 위한 전반적인 환경을 제공하는 것
SDK : 개발을 위한 클래스, 컴파일러, 실행도구, 디버깅 툴, 예제 코드, 튜토리얼 등을 모아놓은 환경을 제공하는 것

Q11. 래퍼 클래스(wrapper class)에 대해 설명하시오.
기본 자료형으로 표현된 데이터를 참조 자료형으로 만들어야 할 경우 래퍼 클래스를 사용합니다. 
보통 특정 메소드에서 참조 자료형을 인자로 받거나, 기본 자료형이 아닌 객체 자료형으로 저장해야할 경우, 객체간 비교가 필요할 경우에 사용합니다.

상속이란
기존 클래스의 기능을 유지하면서 추가적인 기능을 추가하여 클래스를 만들고 싶을 때 사용하는 방법.
상위 클래스의 모든 기능, 속성을 제공받는다. 코드중복을 줄임

2. 라이브러리 vs 프레임워크
프레임워크는 큰 틀을 제공하고 내 코드는 프레임워크의 틀 안에 맞춰서 작성해야 합니다. 큰 뼈대는 이미 잡혀있고 그 안의 내용물을 채우는 느낌 입니다. 작동할 때 코드 실행 흐름을 보면 프레임워크가 내 코드를 호출합니다. 반면 라이브러리는 사용할 수 있는 함수들의 모음으로, 내가 라이브러리를 호출해서 능동적으로 사용합니다.
형식 : create table 테이블명(칼럼명)
create table test(no number, name varchar2(10));

select 칼럼명 from 테이블명 where id=1

-- insert into 테이블명\칼럼명\,...) values(입력자료)...
insert into test(no,name,tel,inwon,addr) values(1,'인사과','111-1111',5,'강남구 역삼동');

< update 테이블명 set 칼럼명=수정값,... where 조건 >
update test set inwon=12 where no=1;
update test set tel='777-7777', inwon=22 where no=3;

delete from 테이블명 where 조건
delete from test where no=2; -- 만일 where 을 입력하지 않으면 구조를 제외한 모든 레코드 폭파

추가 : alter table 테이블명 add contraint 제약조건명 제약조건명
제거 : alter table 테이블명 drop contraint 제약조건명 제약조건명

컴퓨터 공학도한테 디자인(Design)?

<-추후 포스트 추가 예정->

"이 변수가 절대로 Null이 될 수 없을꺼라 장담하니?","물론이지!" 

 

 

 

간단히 말해서 nil은 객체 참조에, null은 그 밖의 포인터 자료형에 사용된다.

//nil 사용
MyClass *obj = nil

// null 사용
int *ptr = NULL;

 

 

Java 에서는 객체 참조값이 null 일 경우, NullPointerException이 발생하게 되지만, Objective-C의 경우는 Java와 달리 내부에서 null 확인작업이 이루어진다. 메시지 전송 과정에서 중앙 메시지 전송 함수가 수신자의 포인터 값을 확인하는데,

이 때 수신자의 포인터가 nil 값인 경우 메시지 전송 함수는 즉시 반환되기 때문이다. 

 

 

Objective-C는 Exception은 발생시키지 않으나 메시지에 전달되는 인자는 정상적으로 진행된다.

증가연산자(++)가 사용되는 경우에도 메시지 수신 객체가 nil 이라 하더라고 인자값은 정상적으로 처리가 되버린다...

 

 

 

nil 수신자에 메세지를 전송할 경우 반환되는 값은 아래와 같다.

반환타입 반환 값
id nil
객체 포인터 NULL
BOOL NO
(unsigned)char '\0'
(unsigned)int 0
(unsigned)long int 0L
(unsigned)long long int 0LL
float 0.0f
double 0.0
long double 0.0

반환 값으로 구조체를 넘겨받는 경우에는 nil 수신자가 정상적으로 동작하지 않는데, 이 경우 Java에서와 같이 메시지 전송 전 nil 여부를 확인할 필요가 있다.


nil 특성을 이용해 프로그램을 구성하려면 프로퍼티 접근자(property accessor), 부재중 동작(absent behavior), 없음의 일관성(consistency with nothing) 등의 세가지 원칙을 지키는 것이 좋다.

 

 

1) 프로퍼티 접근자

프로퍼티의 접근 메소드를 만들어 사용하면 프로퍼티 소유 객체의 값이 nil 인 경우에도 문제가 없다. 하지만 프로퍼티의 접근 메소드를 만들지 않고, myObject -> myProperty 와 같이 직접 접근을 하는 경우엔 메무리 주소 오류가 발생한다.

 

2) 부재중 동작

객체가 부재중(=nil)인 경우 상황에 따라 추가적인 동작을 지정해야 하는 경우가 있다.

  • 로그 객체 : 로그 출력 객체가 설정되어 있다면 전달받은 메시지를 로그에 출력하고, nil로 설정되면 아무런 작업을 하지 않는다.

  • 리스너 객체 : 리스너 객체는 설정된 상태에서만 변경된 정보에 대한 메시지를 전송한다. nil로 설정되면 더이상 변경 사항이 전달되지 않는다.

  • 위임 객체 : 위임 객체는 설정된 상태에서만 위임 객체 기능을 호출하고 없으면 기본 기능만 호출한다.

3) 없음의 일관성

클래스의 프로퍼티에서는 0 또는 nil의 개념이 없는 객체로 일관되게 설계하는 것이 좋다. 프로퍼티를 긍적적인 값을 표현하게 정의하는 것이 좋다. 즉, isEmpty라는 메소드 대신 hasObject라는 메소드 형식으로 정의하는 것이 바람직하다.

 

 

 

 

 

 

 

 

 

 

 

파라미터 매핑 중 객체로 넘기는 방법이 있어서 기록하둔다.

 

var clubMberObj = {
  CLUB_SN : clubSn,
  MBER_NM : mberNm,
  MBER_SN : mberSn,
  MNGR_YN : 'Y',
  PROFILE_IMAGE : profileImage
};

//클럽회원 저장
var sql = "INSERT INTO CLUB_MBER SET ? "

dbconn.query(sql, clubMberObj, function(err, result){
	...
});

다중 쿼리 처리

var sql1 = 'SELECT CLUB_NM FROM CLUB; '; // 클럽목록
var sql2 = 'SELECT MBER_NM FROM CLUB_MBER; '; // 클럽회원

dbconn.query(sql1 + sql2, function(err, results, field){
  var sql1_result = results[0];	//sql1 의 결과값
  var sql2_result = results[1];	//sql2 의 결과값

	...
});

 

app.get('/post/:postId/:myId',(req,res)=> {
    let forPost = [req.params.postId];
    let forRdCheck = [req.params.myId,req.params.postId]; //파라미터 2개 받음
    let sql1 = 'SELECT * FROM POSTS WHERE id = ? ;';
    var sql1s = mysql.format(sql1,forPost); //mysql.format!
    let sql2 = 'INSERT INTO GETMYCIS VALUES (NULL,?,?,1) ;'; //?에 하나씩 들어감
    var sql2s = mysql.format(sql2,forRdCheck);
    connection.query(
        sql1s + sql2s, //두 퀴리를 합쳐줌
         (err,rows) => {
           res.send(rows);
         }
       );
 });

 

특히 ,

 

var connection = mysql.createConnection({multipleStatements: true});

가 선언되어 있어야 한다!

'프로그래밍 > Node.js' 카테고리의 다른 글

npm, package.json  (0) 2020.03.12

 

MySQL


CREATE

CREATE 문을 사용하여 데이터베이스와 테이블을 만들 수 있다
CREATE DATABASE 데이터베이스이름

 

SELECT

SELECT 문을 사용하여 테이블의 레코드를 선택할 수 있다.
SELECT 필드이름1, 필드이름2 FROM 테이블이름 WHERE 필드이름1 = 데이터값1;

 

INSERT

INSERT INTO 문을 사용하여 테이블에 새로운 레코드를 추가할 수 있다.

1. INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES (데이터값1, 데이터값2, 데이터값3, ...)

2. INSERT INTO 테이블이름 VALUES (데이터값1, 데이터값2, 데이터값3, ...)

두 번째 문법처럼 필드의 이름을 생략할 수 있으며, 이 경우에는 데이터베이스의 스키마와 같은 순서대로 필드의 값이 자동 대입된다.

 

이때 생략할 수 있는 필드는 다음과 같다.

 

1. NULL을 저장할 수 있도록 설정된 필드

2. DEFAULT 제약 조건이 설정된 필드

3. AUTO_INCREMENT 키워드가 설정된 필드

 

ALTER

ALTER DATABASE 문은 데이터베이스의 전체적인 특성을 수정할 수 있다.
1. ALTER DATABASE 데이터베이스이름 CHARACTER SET=문자집합이름

2. ALTER DATABASE 데이터베이스이름 COLLATE=콜레이션이름

 

UPDATE

UPDATE 문을 사용하여 레코드의 내용을 수정할 수 있다.

UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값

 

 

ALTER과 UPDATE의 차이점?

 

ALTER과 UPDATE 모두 수정을 하기 위한 명령이지만 차이점이 있다.

ALTER는 데이터베이스의 관계 (테이블) 구조를 수정하는 데 사용되며,

UPDATE 명령은 데이터베이스 관계에 저장된 데이터를 수정하는 데 사용된다.

즉, ALTER 명령은 데이터 정의 언어 명령 이고, UPDATE 명령은 데이터 조작 언어 명령이다.

 

 

DELETE

DELETE 문을 사용하여 테이블의 레코드를 삭제할 수 있다.

DELETE FROM 테이블이름 WHERE 필드이름=데이터값

 

 

 

자료 출처 : http://tcpschool.com/mysql/ ,

https://ko.gadget-info.com/difference-between-alter

 

+ Recent posts