NOW OR NEVER

[JAVA] 상속성 & 문자열 처리 본문

Back-End/JAVA

[JAVA] 상속성 & 문자열 처리

LAURA 2022. 4. 7. 17:01
반응형

상속성

추상메소스

  • 추상메소드는 미래에 후손클래스들이 반드시 가져야 할 메소드이지만 부모클래스를 만드는 시점에서 구체화 할 수 없는경우 메소드 몸체를 정의하지 않고 메소드 선언문만 명시한다.이것을 추상메소드라 한다.
  • 메소드이름 왼쪽에 abstract 키워드를 써 준다.

추상클래스

  • 추상메소드를 하나라도 포함하고 있는 클래스를 추상클래스라 하고 클래스 이름 왼쪽에 abstract 키워드를 써 준다.
  • 추상클래스는 추상메소드뿐 아니라 body가 구체화된 메소드를 포함할 수 있다.
  • 또, 추상클래스는 body를 구체화하지 않는 메소드를 포함하고 있기 때문에 추상 클래스의 객체는 생성할 수 없다
  • 반드시 그 추상클래스를 상속받아 추상메소드를 구현한 클래스의 객체를 생성해야 한다..
  • 익명클래스
    • 이름없는 클래스를 말한다.
    • 추상클래스를 상속받은 클래스를 정의하는데 따로 이름을 정해주지 않고 바로 추상메소드를 오버라이딩 한 클래스를 만들면서 바로 객체를 생성할 때에 사용한다.

다중 상속

  • 객체지향 프로그래밍 중의 하나인 c++에서는 클래스의 다중상속이 가능하다.

    class A{ 
        public void pro(){ } 
    } 
    class B{ 
        public void pro(){ } 
    } 
    clasa C :A,B{ } C ob = new A(); 
    ob.pro(); // 부모 A의 pro를 호출해야 할지, B의 pro를 호출해야할지 ...? 오류가 발생된다.         
    ob.A::pro(); 
    ob.B::pro();
  • 이러한 문제점 때문에 java에는 클래스의 다중 상속을 금지시킨다.

인터페이스

  • 다중상속의 효과를 기대할 목적으로 "인터페이스"를 사용한다.
  • class 클래스이름{ } interface 인터페이스이름{ }
  • 인터페이스는 "완전추상"의 개념이며 인터페이스의 구성요소는 상수와 추상메소드만으로 구성된다.
  • 인터페이스 안에 변수이름앞에 final을 붙이지 않아도 자동 final이다.
  • 인터페이스 안에 메소드이름앞에 abstract을 붙이지 않아도 자동 abstract이다.
  • 자식의 참조변수가 부모의 참조변수를 가리킬 수 없다.
  • 부모의 참조 변수의 객체가 자식 객체를 참조할 수 있다.

Jframe을 상속한 윈도우 창 만들기

  • 클래스 만들 경우 superclass로 Jframe 선택 후 MyFrame 클래스 만들기
  • 가로 세로 설정하는 클래스
    • Window class의 setSize 클래스
    • JFrame(MyFrame)으로 만든 객체를 이용해 객체.setSize(가로, 세로)로 불러오거나 생성자 속에서 setSize(가로, 세로) 호출해서 가로 세로 정할 수 있다.
  • 화면 상에 나타남을 정하는 클래스
    • Window class의 setVisible 클래스
    • 창을 보여줄 때는 true 값, 안보여주고 싶을 때는 false
    • setVisible(boolean)
  • 창에 대해 마우스에 대한 이벤트 인터페이스
    • java.awt.event package : 기능을 인터페이스로 만들어 놓음
    • 이를 오버라이딩해서 사용하는 것
    • MouseListener
      • addMouseListener(this(or 마우스 이벤트처리 담당자)); : 마우스 이벤트 발생시키기
      • mouseClicked : 클릭
      • mousePressed : 누르기
      • mouseReleased : 떼어짐
      • mouseEntered : 들어옴
      • mouseExited : 나감
  • 부모 클래스에 설정자(원하는 클래스) 없으면 조상 쪽으로 타고 가면서 찾아보면 된다.

문자열 처리

  • 자바에서는 문자열 처리를 위해 다음의 클래스를 사용한다.

    변하지 않는 문자열

  • String
    • ex) String data = new String("hello"); or String data = "hello"
      • 문자열을 매개변수로 갖는 메소드는 대체로 String으로 되어있다.
      • 객체 자체가 변하는 것이 아닌 새로운 객체를 만들어 새로운 주소를 할당에 그것을 가리키는 것이기에 변하지 않는 문자열이다.
      • String에 연산을 하게 되면 새로운 객체를 생성하게 되고 참조변수를 새로운 메모리를 참조하게 된다. 이전에 참조하던 메모리는 더이상 참조되지 않는 쓰레기(garbage)가 된다.
      • String은 기본 자료형처럼 사용 가능해서 + 연산자(문자열 연결)를 사용할 수 있다.
      • 네트워크 통신시 생성자 : String(byte[] byte, char
      • 메서드
        • 문자열 길이 알려주는 메소드 : string형변수.length();
        • 두 개의 문자열이 대소문자 구별하여 서로 같은 가(String도 Object 후손) : string형변수1.equals(stirng형변수2) -> boolean 값 반환
        • 두 개의 문자열이 대소문자 구별하지 않아 서로 같은 가 : string형변수1.equalsIgnoreCase(stirng형변수2) -> boolean 값 반환
        • 해당 문자로 끝나는 가 : string형변수.startsWith("문자"); -> boolean 값 반환
        • 해당 문자로 시작하는 가 : string형변수.endsWith("문자"); -> boolean 값 반환
        • 해당 문자열의 몇번째에 위치하는 가 : indexof
        • 해당 문자열의 끝서부터 몇번째에 위치하는 가 : lastIndexOf
        • 바뀌어진 새로운 String 반환(새로운 변수에 담던가, 기존 변수에 다시 담던가) : replace(바꿀문자열. 그자리에 넣을 문자열)
        • 문자열을 구분자로 분리하여 배열로 반환 : split(구분자)
        • 문자열의 일부분만 잘라오기 : substring(시작인덱스, 끝인덱스) -> 시작인덱스 포함해서 끝인덱스 바로 전까지 가져옴, 시작 인덱스만 입력할 경우 시작인덱스부터 끝까지 가져옴
        • 소문자로 바꾼 새로운 문자열 반환(기존 문자열 변동 없음) : toLowerCase
        • 대문자로 바꾼 새로운 문자열 반환(기존 문자열 변동 없음) : toUpperCase
        • 양쪽 공백 지우기 : trim
        • 기본 자료형의 data들을 String화 : String.valueOf(바꾸려는 값); or 바꾸려는 값 + "" ;
        • Wrapper 클래스 : 기본자료형을 객체로 포장해주는 클래스
          • String을 기본 자료형화 : 자료형.parse자료형(바꿀거); ex) Integer.parseInt(b); , Double.parseDouble(b);

변하는 문자열

  • StringBuffer
    • 변하는 문자열 처리를 위하여 StringBuffer로 처리된 객체를 바로 String을 매개변수로 갖는 메소드로 호출할 수 없다. 호출하려면 String생성자로 String 객체를 생성한 후 호출하거나 toString 메소드를 통해 String으로 변환 후 호출해야 한다.
    • 대부분 문자열을 받을 때 String으로 기본으로 설정되어 있기 때문에 전달할 때는 toString으로 변환하여 전달해야 한다.
    • 메서드
      • append
        • String과 달리 + 연산자로 연산 불가능하다. 객체이름.append("문자열")로 붙이기 가능
        • StringBuffer에 append를 통하여 문자열을 추가하면 새로운 객체가 만들어지는 것이 아니라 원래 객체에 문자열이 추가된다.
      • insert : 특정 인덱스에 문자열 추가 가능
      • replace
      • reverse : 반대로
      • setCharAt
      • substring
      • StringBuilder

StringTokenizer

  • java.util의 클래스
  • StringTokenizer 객체이름 = new StringTokenizer(분리할 문자열, 구분자);
    • 구분자의 default 값은 공백이므로 빈칸으로 나눌 경우 분리할 문자열만 작성해도 된다.
  • 구분자별로 구분된 문자열들은 하나의 토큰이 된다.
  • 객체이름.nextToken() -> 토큰을 앞에서부터 하나씩 끄집어 내온다.
  • 객체이름.haseMoreTokens or 객체이름.haseMoreElements : 토큰이 아직 남아있는 지 확인해준다. boolean 값을 반환한다.

Tips

  • GUI : 사람하고 컴퓨터하고 그래픽으로 대화하는 것
    • javax.swing 클래스
  • CUI : 사람하고 컴퓨터하고 텍스트로 대화하는 것
  • 생성자
    • 멤버변수를 초기화 할 목적으로 사용
    • 오버로딩
      • 생성자가 중복되어 있는 것(여러 개 있는 것)
      • 메소드 이름이 똑같은 것이 여러 개 있는 것
  • 오버라이딩은 상속관계에 있을 때 부모 꺼를 자식이 덮어 씌우는 거
  • 정수 65를 char 변환시 A, 66은 B
  • 배열의 길이 : length
  • 문자열의 길이 : length()
  • Scanner 객체를 통해 공백을 포함한 문장을 입력하려면 nextLine() 사용
  • static 클래스는 객체 없이도 사용 가능 하다.
  • java.lang
    • 자바가 제공하는 클래스를 사용하기 위해서는 import를 해야한다. 그러나 lava.lang 패키지의 모든 클래스들은 자동으로 import되기 때문에 사용자가 따로 import를 하지 않아도 된다.
  • 행 번호가 있는 메모장 : https://www.editplus.com/kr/
  • 프로그램 실행시에 전달하는 값은 main 메소드의 매개변수 args 배열에 전달된다. 전달된 것 만큼 배열의 크기가 잡힌다. 하나도 전달되지 않으면 배열은 생성되지 않는다.
Comments