import javax.swing.ImageIcon;
import java.awt.Image;

public class ImageExample {
    public static void main(String[] args) {
        try {
            ImageIcon icon = new ImageIcon("images/logo.png");
            Image img = icon.getImage();

            // 이미지 크기 변경
            Image resized_img = img.getScaledInstance(300, 100, Image.SCALE_SMOOTH);

            // 변경된 이미지로 아이콘 생성
            ImageIcon resized_icon = new ImageIcon(resized_img);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

'백엔드 > Java' 카테고리의 다른 글

[Java] 예외처리(Exception)  (0) 2021.03.30
[Java] Thread(쓰레드)  (0) 2021.03.29
[Java] 인터페이스(interface)  (0) 2021.03.16
[Java] 상속  (0) 2021.03.16
[Java] 배열  (0) 2021.03.09

추상메소드만 포함된 클래스

상속을 위해 만들어짐

어차피 추상메소드만 쓰이는 곳으로 메소드 앞에 abstract를 붙이지 않아도 됨

추상메소드를 상속받은 클래스에서는 반드시 메소드를 오버라이딩 해야 함

클래스는 단 하나만 상속받을 수 있지만, 인터페이스는 여러 개 상속받을 수 있음

 

public class Aaa extends Bbb implements Ccc, Ddd {

... (생략) ...

}

 

생성자가 있지만 abstract 클래스이므로 스스로 new로 객체를 생성할 수 없다.

 

 

interface 

java.awt.event - interface MouseListner 의 메소드...

마우스리스너 인터페이스를 implements하려면 MouseListner의 모든 메소드를 오버라이딩해야한다.

메소드를 많이 가지고 있는 인터페이스를 가지고 있을 경우, 모든 메소드를 오버라이딩해야하므로 번거롭다

이를 해결하기 위해 미리 오버라이딩해둔 class가 만들어져있다.

단, 클래스는 하나만 상속받을 수 있으므로 이를 유의하여 사용해야한다!!

 

 

java.awt - class Frame - setVisible .. 어? 해당 클래스에 없네?.. 그럼 부모 클래스에 가서 찾아볼까?.. 찾아보니.. 있네..!

Methods inherited from class java.awt.Window

 

 

java.awt - class Frame의 조상인 Component Class 의 add 메소드 : 컴포넌트를 상속받은 객체들을 모두 파라미터에 넣을 수 있음~~ Component 들어가서 서브클래스로 뭐가 달려있는지 확인해보기

 

 

 

 

 

 

 

 

'백엔드 > Java' 카테고리의 다른 글

[Java] Thread(쓰레드)  (0) 2021.03.29
[Java] ImageIcon의 이미지 크기 변경하기  (0) 2021.03.25
[Java] 상속  (0) 2021.03.16
[Java] 배열  (0) 2021.03.09
[Java] 조건문, 반복문  (0) 2021.03.09

 

상속(Inheritance)
- 실체에 대한 추상화 과정을 거쳐 클래스를 정의하고 난 후, 공통점을 가진 클래스들을 모아서 부모와 자식의 관계를 도출하는 과정
- 부모 클래스는 자식에게 자신이 가지고 있는 자료, 메소드를 상속할 수 있음
- 코드의 재사용성, 중복을 최대한 줄여 효율적인 프로그래밍 구현
- 상속의 관계는 extends 키워드를 사용하여 구현함

 

1) 상속과 생성자
- 상속 구조에서는 자식을 통해 부모가 생성되어지는 경우 부모의 생성자가 먼저 호출됨
- 명시적으로 부모의 생성자를 호출할 경우에는 super() 메소드를 사용. super() 메소드는 반드시 첫 번째 줄에서 호출되어야 함!

2) 자료(Field)/메소드의 재정의(Overriding)
- 오버라이딩: 부모가 가지고 있는 자료나 혹은 메소드를 그대로 상속받아 사용하는 것. 상속받는 자료나 메소드는 동일한 형태로 구현해야함
➙ String의 equals() 메소드는 String의 부모인 Object 클래스에서 상속받은 것이다.
- 오버라이딩은 보통 메소드의 오버라이딩을 의미

➙ 부모가 가진 메소드를 오버라이딩한다는 것은 부모가 가진 로직을 실행한다는 것에 의미가 있는 것이 아니라 부모가 가진 메소드의 이름을 물려주는 것에 의미가 있다. 부모가 가지고 있는 메소드의 이름을 알고 있으면 자식들의 메소드도 그 부모의 메소드 이름을 통해 접근할 수 있다.


➙ 자식에게 물려주는 메소드는 이름만 있으면 된다. 자식들은 알아서 오버라이딩된 자신의 메소드의 바디(실행로직)를 쓰기 때문이다. 따라서 부모의 바디를 지워주고 이름만 남기면 되는데, 이때 바디가 없는 메소드는 실행될 수 없기 때문에 앞에 abstract를 붙여 추상메소드로 만들어줘야한다. 추상메소드를 하나라도 가지고 있는 클래스는 abstract를 붙여 추상클래스로 만들어줘야하며, 추상클래스는 자기 스스로 new로 객체를 생성할 수 없다!! 자식을 통해서는 객체생성 가능! 기능통일! 부모의 메소드를 실행할 가능성은 거의 없음!

3) 추상 메소드 / 추상 클래스
- abstract 키워드가 붙으며 상속하는 메소드를 반드시 오버라이딩 하도록 명시함
- 추상 메소드는 메소드의 바디({})가 없으며 리턴타입, 메소드명, 인자값만을 정의한 형태임
예) void draw();
- 추상 메소드를 하나라도 포함하고 있는 클래스는 abstract 클래스가 됨
- 추상 클래스는 new 연산자를 이용하여 객체 생성이 불가능함

4) 클래스 간의 형변환
- 상속관계에서만 가능
- 부모의 타입으로 정의하고 자식의 모습으로 생성을 하는 경우 묵시적 형변환이 일어남
- 자식의 타입으로 정의하고 묵시적인 형변환을 통해 생성된 객체를 저장하고자 할 때 명시적 형변환이 일어남
- 자식의 모습으로 정의하고 부모의 모습으로 생성하는 것은 절대 불가능!

'백엔드 > Java' 카테고리의 다른 글

[Java] ImageIcon의 이미지 크기 변경하기  (0) 2021.03.25
[Java] 인터페이스(interface)  (0) 2021.03.16
[Java] 배열  (0) 2021.03.09
[Java] 조건문, 반복문  (0) 2021.03.09
[Java] 연산자  (0) 2021.03.09

 

1. 배열 : 동일한 데이터 타입을 가진 값을 여러 개 저장하는 공간
  - 힙에 생성(new) 되고 인덱스를 통해 데이터를 출력(0번지 ~)
  - 저장공간은 물리적으로 연속되어 생성됨
  - 배열의 초기값은 null

<형식>
데이터 타입[] 변수명(참조) = new 데이터타입[크기];
데이터 타입 변수명(참조)[] = new 데이터타입[크기];
데이터타입[] 변수명(참조) = {데이터1, 데이터2};
데이터타입[] 변수명(참조) = new 데이터타입[] {데이터1, 데이터2, …};
데이터타입[] 변수명(참조) = null; //참조형의 빈 값 = null;

 

 

2. 다차원 배열 (중첨for문 사용)

<형식>
데이터타입[][] 변수명(참조) = new 데이터타입[크기][크기]
데이터타입[][] 변수명(참조) = new 데이터타입[크기][]; //가변형

 

 

'백엔드 > Java' 카테고리의 다른 글

[Java] 인터페이스(interface)  (0) 2021.03.16
[Java] 상속  (0) 2021.03.16
[Java] 조건문, 반복문  (0) 2021.03.09
[Java] 연산자  (0) 2021.03.09
[Java] 변수  (0) 2021.03.09

데이터 

1) 변수에는 데이터를 하나만 저장 - 변수 

2) 같은 데이터 타입을 여러 개 저장 - 배열 

3) 다른 데이터 타입을 여러 개 저장 - 객체   

 

 

제어문 

1) 조건문: if, if~else, if~else if~else, switch 

조건문 
사용 경우 
형식 
if 
조건의 결과값이 
항상 true인 경우 
if(조건식) { 실행 문장; } 
if ~ else 
조건의 결과값이 
true, false인 경우 
if(조건식) { 실행 문장1; } 
else { 실행 문장2; } 
if ~  else if ~ else 
조건식이 여러 개인 경우 
if(조건식) { 실행 문장1; } 
else if(조건식) { 실행 문장2; } 
else { 실행 문장 n; } 
switch ~ case 
정확한 값(정수)을 입력하여 비교할 경우 
switch(결과값: 4byte이하 정수) { 
  case 결과값 : 실행 문장1; break;  
  case 결과값 : 실행 문장2; break;  
  case 결과값 : 실행 문장3; break;  
  default: 실행문장 4; 
예시) 조회는 1번, 수정은 2번, 삭제는 3번 ... 

 

2) 반복문 - for문

반복문 
사용 경우 
형식 
for 
정확한 반복 횟수를 알고 있을 때 
for(초기값; 조건식; 증가값) { 실행 문장(반복할 로직); }

예) 1에서 10까지 출력
for(int i=1; i<11; i++) {
    System.out.println(“i= ” + i)
}
중첩 for문 
2차원 배열 출력  (구구단) 
for(초기값; 조건식; 증가값) { 
    for(초기값; 조건식; 증가값) { 
        실행 문장(반복 로직); 
    } //inner for 
} //outer for 
확장 for문 
배열, 컬렉션 객체 
for(배열, 컬렉션 안에 속한 데이터 타입: 배열, 컬렉션 객체) {
    실행문장(반복로직); 

 

3) 반복문 – while 

반복문 
사용 경우 
형식 
while 
정확한 반복 횟수는 모르지만,
종료되는 시점을 알고 있는 경우 
while(조건식) { 실행문장(반복로직); }   
** 무한루프에 빠지지 않도록 주의  ⇒ flag 변수를 활용

 

'백엔드 > Java' 카테고리의 다른 글

[Java] 인터페이스(interface)  (0) 2021.03.16
[Java] 상속  (0) 2021.03.16
[Java] 배열  (0) 2021.03.09
[Java] 연산자  (0) 2021.03.09
[Java] 변수  (0) 2021.03.09

+ Recent posts