[2023.10.10] 개발자 교육 12일 차 : 강의-복습, 클래스 쪼개기, 인터페이스, 화면구현, 다형성 [구디 아카데미/김승수 강사님]

DaramGee·2023년 10월 10일
0

오늘 정리

코딩의 다양성? 코드를 써내려가는 방법은 정말 다양하게 존재한다. 여러 관점, 다양한 영역을 넘나들며 코드를 작성할 수 있는 경험과 눈이 필요하다. (빠른 손과 검색이 필요할수도..ㅎㅎ)

자바의 다형성? java 언어의 큰 특징 중 하나이다. 하나의 참조변수를 통해 여러 객체를 참조할 수 있도록 하여, 같은 참조변수이지만 그 실행은 서로 다르게 작동시킬 수 있다. 이를 통해 유지보수하기 쉬어지고, 재사용의 범위가 넓어질 수 있다.

복습

  • 클래스
  • 생성자
    • 클래스 간 연결, 관계형성 가능
  • TimeClient/Server/View
    • Thread : 경합, 지속 서비스, 차례대로 진행해야 할 때 필요
    • 각 클래스의 변수, 클래스, 메소드의 배치와 연결에 대한 그림을 그릴 줄 알아야 함.

  • 야구숫자게임(step4)
    • API
      • void javax.swing.text.JTextComponent.setText(String t) → 덮어쓰기
      • void javax.swing.JTextArea.append(String str) → 붙이기
  • 1차 배열 복습(with GridLayout)
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    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
    	}
    }
  • 화면구현 관련(예 : 계산기 화면 구현)
    • JFrame → setSize, setVisible, setTitle, add()

    • JPanel → setLayout

    • JTextField

    • GridLayout(int 행, int 열)

  • try catch
    • try 부분 : 입출력 구문
    • catch 부분 : 예외적인 상황발생했을때 처리한느 블럭

강의 내용

  • 삼항연산자

    • 세 개의 피연산자를 필요로 하는 연산자

      public static void main(String[] args) {
      		System.out.println(10+10);          //20
      		System.out.println("10"+10);       //1010 숫자열이 문자열과 만나면 더하기x(컨켓?)
      		System.out.println("10"+(10+20));//1030
      		int hour = 7;
      		String result1 = (hour<10 ? "참" : "거짓");
      		System.out.println(result1);
      		String result2= (hour<10 ? "0"+hour : ""+hour);
      		System.out.println(result2);
      	}
  • API

    • void javax.swing.JTextField.setHorizontalAlignment(int alignment)
  • 인터페이스에 대한 구현체 클래스 설계 (설계적 관점으로 보기)

    • implements는 추상메소드를 오버라이드(재정의)하는 것, 선언만 되어있는 메소드의 명세서가 되는 역할
    • 추상메소드 중심 인터페이스 중심의 코딩을 전개
    • 인터페이스, 추상클래스 모두 구현체 클래스가 필요함
    • 똑같은 메소드를 호출하더라도 구현체 클래스가 누군가에 따라 다르게 동작함. (다형성) ←선언부, 생성자의 이름 다름
    • 인터페이스
      • 인터페이스는 추상클래스보다 더 추상적이어서 오직 추상메소드만! 가짐.
      • 인터페이스의 구현체일 땐, implements를 예약어로 사용
    • 추상클래스
      • 추상클래스(생성 시 abstract 클릭)
      • 추상메소드, 일반메소드, 생성자, 변수선언 모두 가능함.
      • 추상클래스의 구현체일 땐, extends를 예약어로 사용
      • Superclass로 상속받아 사용가능함. (포함된 메소드도 사용 가능)
      • 추상메소드
        • 미정, 아직 모르는 메소드임.
        • 메소드 선언인데 세미클론으로 끝남.
          public abstract class Duck {
          	public Duck() {}
          	//추상메소드 o
          	public abstract void display();
          	//추상메소드 x
          	public void swimming() {
          		System.out.println("모든 오리는 물위에 뜬다.");
          	}
          }
  • 선언부와 생성부가 다르게 코딩 전개

    • 왜?? 범위가 더 넓은 걸 사용하면 범위가 더 좁은 구현체의 클래스를 담을 수 있음.
    • 유지 보수 시, 코드의 수정을 최소화할 수 있음.
      //선언부와 생성부의 타입이 다르다!(권장사항)
      QuackBehavior quackBehavior = new Squeak();

강의 마무리

  • 계산기/야구 UI, Logic, Event 세 클래스로 나눠보기
    • 각각의 클래스에 어떤 메소드가 배치되어야 할까?
    • 각각의 클래스에 들어갈 전역변수 정해보기

0개의 댓글