[2023.10.06] 개발자 교육 11일 차 : 강의-복습, 클래스 쪼개기, 소켓, 예외처리 [구디 아카데미/김승수 강사님]

DaramGee·2023년 10월 6일
0

오늘 정리

파라미터자리의 활용? 메소드, 생성자에서 활용하는 것의 연습이 필요하다.

섞어쓰기? 자연스럽게 메소드와 생성자를 오가는 연습, 클래스를 오가는 코드가 그려져야한다.

복습

  • 메소드, 생성자의 파라미터자리 with 참조형타입
    class Param{
    	int ival;
    }
    public class TestParam {
    	//디폴트 생성자
    	TestParam(){  
    		System.out.println("TestParam 호출");
    		Param p = null;
    		effectParam(p);
    	} 
    	//파라미터 자리 참조형타입 연습, 파라미터 자리를 갖는 건 생성자와 메소드
    	void effectParam(Param p) { //p는 널인가?
    	}
    	public static void main(String[] args) {
    		TestParam tp = new TestParam();
    		/*이 방법보다는 위의 생성자에 null값을 넣는 연습이 필요
    		
    		tp.effectParam(null); //null
    		Param p = null;
    		tp.effectParam(p);   //null
    		p = new Param();   
    		tp.effectParam(p);  //null
    		*/
    	}
    }
    Untitled
  • 생성자
    • default 생성자 : 파라미터값 x

    • 생성자의 파라미터값은 인스턴스화할 때 생성(선언만 아니라 생성도 포함)

    • 생성자를 통해 값의 초기화 가

      import javax.swing.JFrame;
      
      public class JFrame1 {
      	//선언부
      	int width;
      	int height;
      	JFrame jf = null;            //선언과 생성 나눠서 써보기
      	//생성자 -> 리턴타입x, 
      	JFrame1(){
      		System.out.println("디폴트 생성자");
      		jf = new JFrame();
      		System.out.println("지역변수 : "+width+", "+height+"/ 전역변수 : "+this.width+", "+this.height);
      		jf.setTitle("입력|수정|삭제");
      	}  //default 생성자
      	
      	JFrame1(int width){ //생성자의 파라미터값은 인스턴스화할 때 생성(선언만 아니라 생성도 포함)
      		System.out.println("파라미터 한 개 있는 생성자");
      		jf = new JFrame();
      		System.out.println("지역변수 : "+width+", "+height+"/ 전역변수 : "+this.width+", "+this.height);
      		this.width   = width;
      		height = 500;
      		String title = "토마토의 창";
      		jf.setTitle(title);
      	}
      
      	JFrame1(int width, int height){ //생성자의 파라미터값은 인스턴스화할 때 생성(선언만 아니라 생성도 포함)
      		System.out.println("파라미터 두 개 있는 생성자");
      		jf = new JFrame("입력|수정|삭제");   //이대로 생성하면 타이틀 생김.
      		System.out.println("지역변수 : "+width+", "+height+"/ 전역변수 : "+this.width+", "+this.height);
      		this.width   = width;
      		this.height = height;
      	}
      	
      	//사용자정의 메소드
      	public void initDisplay() {  //아래 주석처리처럼 전변의 값을 정해둘 수 있음. 
      //		this.height = 800;
      //		this.width  = 700;
      		jf.setSize(width, height);  //전변이기 때문에 바로 접근 가능
      		jf.setVisible(true);
      	}
      	//메소드
      	public static void main(String[] args) {
      		JFrame1 jf1 = new JFrame1(); 
      		jf1.initDisplay();                    //가로 세로 기본값으로 창 생김
      		jf1 = new JFrame1(500,400);  
      		jf1.initDisplay();                    //JFrame 생성이 안되어있음 -> NullPointException ->  생성해서 에러 해결
      		jf1 = new JFrame1(300);
      		jf1.initDisplay();                    //세로값은 초기화해둠.
      	}
      
      }
  • 배열
    • 객체배열 학습

      public class EmpVOTest {
      	public static void main(String[] args) {
      		EmpVO eVOs[] = new EmpVO[3];
      		EmpVO eVO = new EmpVO(7466,"가디",3000);
      		System.out.println(eVO.getEmpno());
      		System.out.println(eVO.getEname());
      		System.out.println(eVO.getSalary());
      		System.out.println(eVO);
      		eVOs[0] = eVO;
      		eVO = new EmpVO(7599,"고디",4000);
      		System.out.println(eVO.getEmpno());
      		System.out.println(eVO.getEname());
      		System.out.println(eVO.getSalary());
      		System.out.println(eVO);
      		eVOs[1] = eVO;
      		eVO = new EmpVO(7398,"구디",7000);
      		System.out.println(eVO.getEmpno());
      		System.out.println(eVO.getEname());
      		System.out.println(eVO.getSalary());
      		System.out.println(eVO);
      		eVOs[2] = eVO;
      		for(int i=0;i<eVOs.length;i++) {
      			System.out.println(eVOs[i]);
      		}
      	}
      
      }

강의 내용

  • 섞어쓰기(메소드, 생성자를 오가며 섞어 쓰며 익숙해지기)

  • Call by …

    • Value 값에 의한 호출
    • Reference 번지에 대한 호출
  • 관련 프로그램, 사이트 추천

  • 계산기 실습

  • 소켓

    • 네트워크에서 실행되는 두 프로그램 간 통신 링크의 양 끝
    • java.net 패키지에 속해있음.
    • 소켓클래스
      • Socket
      • ServerSocket
        • InputStream, OutputStream을 통해 클라이언트와 데이터를 주고 받음.
  • Time Server 구축

    - [TimeServer.java](http://TimeServer.java) / TimeClient.java
    - thread 검색 → run() 메소드 오버라이드
    - [java.io](http://java.io) → ObjectInputStream, ObjectOutputStream
    - [java.net](http://java.net) → ServerSocket, Socket
    - TimeServer, TimeClient  클래스 생성(스레드 상속)
    
        
    - TimeSever
        - API를 받아서 현재시간 반환하는 메소드 설계
            - Calendar.getInstance()
                
          
                
            - 시간이 바뀌지 않는 것은 서버가 연결되지 않았기 때문
            - 시간 출력은 필수로 처리할 수 있도록 예외처리 필요(try catch 사용)
                
                ```java
                public static void main(String[] args) {
                		int port = 4000;
                		ServerSocket server = null;  //존재만 함. 일x, ServerSocket은 예외처리를 반드시 하게 되어있는 클래스임. 
                		Socket client = null;           //일을 하는 소켓
                		try{
                			server = new ServerSocket(port);
                		} catch (IOException ie) {
                			System.out.println("해당 포트는 이미 사용중입니다.");
                			try {
                				server.close();
                			} catch (IOException e) {
                				System.out.println(e.toString());
                			} 
                		}
                		System.out.println("TimeServer started successfully");
                		while(true) { //서버 24시간 작동 무한루프앞에선 예약만 받고, 서버가 자리로 안내하는...?!
                			try {
                				client = server.accept();
                				if(client!=null) {
                					System.out.println(client);					
                				}
                				//System.out.println("New client connected..."+client.getInetAddress());
                			} catch (Exception e) {
                				System.out.println(e.toString());
                			}
                		}
                	}
                ```
                
    - TimeClient
        - run메소드 오버라이드 → start()로 값 호출 가능(JVM 인터셉트)
        - ObjectOutputStream/ObjectInputStream
            
            ```java
            //다른 스트림 중 아래 선택이유? 내부적 직렬화, 다른 stream클래스보다 보안 높아서 사용
            		ObjectOutputStream oos = null;
            		ObjectInputStream ois = null;
            ```
            

0개의 댓글