[2023.10.11] 개발자 교육 13일 차 : 강의-복습, 클래스 쪼개기, MVC [구디 아카데미/김승수 강사님]

DaramGee·2023년 10월 11일
0

오늘 정리

java를 java답게 코딩하기? 재사용성과 이식성을 생각하며 코딩 전개하고, 클래스 간 결합도는 줄이고, 코드양은 늘어도 복잡도는 늘지 않게 코딩한다.

생성자는? 전처리의 역할을 하고, 초기화, 재정의 등의 역할을 한다.

복습

  • 생성자(전처리, 거쳐감, 실행문을 경유→초기화, 재정의, if문 등)
    • 파라미터값에 따라 코드 실행 과정, 처리가 달라질 수 있음.
    • 인스턴스화는 이미 생성자를 포함하고 있다. but, 파라미터있는 생성자는 따로 선언 필요
    • 파라미터값 있는 생성자가 하나라도 존재하면, 디폴트 생성자는 제공되지 않는다.
  • static
    • static 안에서는 this, super와 같은 예약어는 사용할 수 없음.
  • 오늘 학습한 API
    • javax.swing.JFrame 패키지 : 자바최초 MVC패턴 API 적용 사례
    • ActionEvent (JButton, JTextField, JCheckBox, JFileChooser, JMenuItem, JRadioButton..)
      • getSource() : 이벤트를발생시킨 객체의 위치값을 가져온다
      • getActionCommand() : 이벤트를 발생시킨 객체의 문장열을 가져온다
      • getModifiers() : 이벤트가 발생되었을 때 같이 사용된 modifier키들을 가져온다
    • double java.lang.Double.parseDouble(String s)
  • 콜백메소드
    • 시스템이 자동으로 호출-시점결정권이 개발자에게 없음) 호출
    • 장점 - 위변조 x
    • 주소번지를 두 번 접근해야 이벤트 처리가 가능한 경우
      • 예 : 이차배열, 객체배열, 제네릭(다이아몬트연산자)
  • private & getters and setters
    • private 변수의 경우, 캡슐화로 인해 직접 접근 불가능한 변수 (변수는 원래 관계가 있는 여러 값을 기억하는 목적으로 사용됨. )
  • 1차배열
    • 원시형/참조형

      public static void main(String[] args) {
      		//원시형 1차배열
      		int is[] = new int[3];  
      		is[0] = 1;  //재정의 
      		is[1] = 2;
      		is[2] = 3;
      		System.out.println(is[0]);
      		System.out.println(is[1]);
      		System.out.println(is[2]);
      		
      		//참조형 1차배열
      		DeptVO dVOs[] = new DeptVO[3];
      
      		//향상된 for문 출력 & 진행될 때 계속 생성하여 출력
      		//타입(클래스)   변수명  :  배열명
      		for(DeptVO       dVO    :  dVOs) {
      			dVO = new DeptVO();
      			System.out.println(dVO);
      		}
      
      		//일반적인 출력 
      		System.out.println(dVOs[0]);
      		System.out.println(dVOs[1]);
      		System.out.println(dVOs[2]);
      	}

강의 내용

  • Java

    • 자바를 자바답게 코딩하기 - 재사용성과 이식성
    • 효과적으로 코딩 전개하기 - 추상클래스, 인터페이스 설계하고 구현해 나가기
    • 클래스 사이의 결합도를 낮춰서 단위테스트, 통합테스트 가능
    • 마지막으로 납품, 배포하기
    • 코드의 양은 늘어나도 코드의 복잡도는 늘지 않도록 고민 → 코드리뷰,
  • 데이터 처리하기(클래스 설계)

  • VO 패턴(Value Object)

    • 사용 되는 값이 객체로 표현 되며, 값 변경이 없는 경우를 말한다.
    • 여러 개의 변수를 선언하고 있는 클래스를 설계
    • 한 번에 한 개의 로우만 담을 수 있지만, 객체배열은 가능함.
    • 예)DeptVo의 deptno, dname, loc 변수
  • DTO 패턴(Data Transfer Object)

    • 데이터의 전송을 위한 객체이며, 비지니스 로직까지 담아서 사용하기 한다.
    • 비교적 자유롭게 사용하는 객체
  • MVC 패턴

    • MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다
      1. 모델: 데이터와 비즈니스 로직을 관리합니다.
      2. 뷰: 레이아웃과 화면을 처리합니다.
      3. 컨트롤러: 모델과 뷰로 명령을 전달합니다.
  • 클래스 나누기 (MVC) : 예(계산기/야구게임)


  • 치환
    public class M {
    	//JFrame은 
    	JFrame jf = new JFrame();
    	JButton jbtn = new JButton("조회22");
    	JButton jbtn2 = jbtn;
    //	JButton jbtn2 = new JButton("입력");
    
    	public void initDisplay() {
    		System.out.println(jbtn == jbtn2); //true 
    		jf.setVisible(true);
    		jf.setSize(300,400);
    		jf.add("North",jbtn);
    		jf.add("Center",jbtn2);
    	}
    	public static void main(String[] args) {
    		M m = new M();
    		m.initDisplay();
    	}
    }
  • 객체 배열
    public class JButtonArray implements ActionListener{
    	//선언부
    	JFrame jf = new JFrame();
    	JButton jbtns[] = new JButton[4];
    	String jbtnsLabels[] = {"one", "two", "three", "four"};
    	//생성자
    	public JButtonArray() {
    		//객체배열 초기화하기, 생성자 첫번째 역할은 전역변수의 초기화를 담당
    		for(int i=0;i<jbtns.length;i++) {
    			jbtns[i] = new JButton(jbtnsLabels[i]);
    			jbtns[i].addActionListener(this);          //이 클래스를 참조
    		}
    	}
    	//사용자메소드
    	public void initDisplay() {
    		jf.setTitle("객체배열 연습");
    		jf.setVisible(true);
    		jf.setSize(500,300);
    		jf.setLayout(new GridLayout(1,4)); // 1/4로 균등분할하여 레이아웃됨
    		//for문 사용하여 각 버튼을 레이아웃으로 생상하여 배치함. 
    		for(int i=0;i<jbtns.length;i++) {
    			jf.add(jbtns[i]);
    		}
    	}
    	//메인메소드
    	public static void main(String[] args) {
    		JButtonArray ja = new JButtonArray();
    		ja.initDisplay();
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		// TODO Auto-generated method stub
    	}
    }

강의 마무리

  • 클래스 나누기까진 어느정도 이해는 되었지만, 코드를 작성하는 부분은 여전히 부족하여 복습과 추가 공부가 필요하다 😭
  • 여러 개념을 매일 실습을 하며 정리가 되다보니 각 개념들에 대해 정리할 수 있는 노트의 작성이 필요하다(이를 옵시디언을 통해 정리해보자)

0개의 댓글