본문 바로가기

공부

[JAVA] ServerSocket / Socket / 상속관계 / 생성자 / 입출력 스트림

자바 예상 문제

1. 자바에서 TCP통신에 사용되는 network 클래스는무엇인가? 간단히 클래스에 대한 설명을 하시오

 ServerSocket  
 Socket

-------------------------------------------------------------------------------------------

정리

ServerSocket : 서버단에서 port를 사용하여 클라이언트의 접속을 대기하기 위한 용도로 사용

 ex) ServerSocket s = new ServerSocket(8989); -> 8989 는 포트번호
                   s.accept();

클라이언트의 접속을 기다리기 위해서는 accept() 메소드를 호출해 주어야 하며
accept() 메소드는 클라이언트가 접속될 때까지 접속대기(블럭킹) 상태를 유지하게 된다.

accept() 메소드는 결과로 Socket 객체를 리턴한다.(클라이언트 접속시)

 

Socket

서버와 클라이언트 양쪽의 TCP 통신을 위해 사용되는 클래스 서버에서는 ServerSocket 클래스의
accpet() 메소드의 결과로서 생성되며 클라이ㅏ언트에서는 직접 서버ip, port를 사용하여 생성

 ex) Socket s = new Socket("127.0.0.1",8989); -> 서버주소 , 포트번호

모든 I/O, network 관련 클래스는 관련된 예외(Exception) 처리를 해주어야 한다.


-------------------------------------------------------------------------------------------

자바에서 사용되는 입출력 스트림(I/O)  -> 데이터를 주고받기위한 입출력

크게 두가지 분류로 나뉘어 진다.

1. 바이트 단위로 데이터를 처리하는 바이트 스트림계열  -> 더 많이 사용됨(문자 뿐만 아니라 다른것도 전송하기 때문에)
  
            InputStream,                       OutputStream

       FileInputStream,                  FileOutputStream         -> 파일에서 입출력을 받고자 할때

 BufferedInputStream,           BufferedOutputStream         -> 성능 향상을 위한 스트림


대표 메소드 :  read(),              write(byte b)

         read(byte b[]),           write(byte b[])               -> byte 배열의 크기만큼 writing 할수있다.


2. 문자 단위로 데이터를 처리하는 문자(character) 스트림 계열
 
              Reader,                          Writer

         FileReader ,                    FileWriter        -> 파일에서 입출력 받고자 할때

  BufferedReader ,              BufferedWriter        -> 성능 향상을 위한 스트림

-------------------------------------------------------------------------------------------

생성자

클래스안에 들어갈수있는 요소는 메소드 생성자 클래스, 메소드처럼 생겻지만 return형이 없다. 클래스 이름과 같다.
클래스가 객채로 만들어질때 사용된다.  new MyFrame(); 하면 class MyFrame~~ 이게 호출된다.

생성자 쓰는 이유 -  멤버변수의 초기화

-------------------------------------------------------------------------------------------

상속관계

A a = new B () ; -> a는 A가 객체가 됬을때 주소를 가질수있다. new B는 B의 주소값을 나타낸다.  -> 이게 가능
B b = new A () ; -> b는 B가 객체가 됬을때 주소를 가질수 있다. new A는 A의 주소값을 나타낸다.

class A (extends Object){                -> extends Object 는 생략되어있다.
}

class B extends A { -> B는 A도 있고 B도 있다.
}

생성자만이 상속안된다. 문법적으로 생성자는 클래스 이름과 같아야하는데 상속되버리면 클래스 이름과 다르기때문이다.


this() -> 현재 클래스의 생성자를 호출

this.  -> 현재 클래스 (멤버변수를 가리킨다)


super() -> 상위 클래스의 생성자를 의미 ,모든 생성자의 첫번째 라인에 생략되어있음 (default로 들어가 있음)

------------------------------------------------------------------------

생략 시리즈

1. 모든 클래스에 default생성자는 생략 되어 있다.

ex) public ClassName(){}


2. 모든 생성자의 첫번째 라인에는 super()가 생략되어 있다.

ex) public ClassName(){
            super();
      }


3. 모든 클래스에는 Object 클래스 상속이 생략되어 있다.

ex) public ClassName extends Object{}