본문 바로가기
728x90

언어(Language)/Java37

다형성(polymorphism) 다형성이란? 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 같은 코드에서 여러 다른 실행 결과가 나옴 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들수 있음 다형성을 사용하는 이유? 상속과 메서드 재정의를 활용하여 확장성 있는 프로그램을 만들 수 있음 그렇지 않는 경우 많은 if-else if문이 구현되고 코드의 유지보수가 어려워짐 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있음 package ch05; public class Animal { public void move() { System.ou.. 2023. 8. 9.
[Java] 상속, 오버라이딩 상속 (Inheritance)- 부모가 자식에게 물려주는 행위- 부모 클래스의 필드와 메소드를 자식 클래스에 물려주는 것- 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄이고 개발 시간을 단축- 클래스의 수정을 최소화할 수 있음- 상속하는 클래스 : 상위 클래스, parent class, super class - 상속받는 클래스 : 하위 클래스, child class, sub class​- 상위 클래스는 하위 클래스 보다 더 일반적인 개념과 기능을 가짐- 하위 클래스는 상위 클래스 보다 더 구체적인 개념과 기능을 가짐- 하위 클래스가 상위 클래스의 속성과 기능을 확장 (extends)한다는 의미# 하위 클래스가 생성 되는 과정​- 하위 클래스를 생성하면 상위 클래스가 먼저 생성 됨-.. 2023. 8. 7.
[Java] 배열 배열 (Array) - 연관된 데이터를 모아서 통으로 관리하기 위해서 사용하는 데이터 타입 - 여러개의 데이터를 하나의 변수에 저장하기 위한 것 - 정적인 크기를 가지며, 한 번 생성된 후에는 크기를 변경할 수 없음 - 메모리 상에 연속된 공간을 차지, 각 요소는 인덱스를 통해 접근 - 객체 배열의 메모리 공간에는 heap 메모리에 대한 주소 값이 할당 # 인덱스 - 인덱스연산자 : [ ] - 0부터 시작해서 배열의 크기보다 하나 작은 값까지의 범위를 가짐 # 배열 길이 반환 - 배열명.length # 배열 선언 자료형[] 배열명 = new 자료형[배열크기]; ex) int[] numbers = new int[3]; // 크기가 3인 int 배열 생성 # 배열 값 초기화 배열명[인덱스번호] = 값; ex.. 2023. 8. 4.
[Java] 정적(static) 멤버 정적(static) 멤버- 클래스 레벨에 선언되므로 클래스의 모든 인스턴스에서 동일한 값을 공유- 클래스가 로드될 때 메모리에 할당되며, 프로그램이 종료될 때까지 유지   → 프로그램 실행 중 항상 메모리에 상주   → 해당 클래스의 인스턴스를 생성하지 않고도 접근할 수 있음- 특정 인스턴스에 속하지 않으므로 해당 변수를 사용하려면 클래스 이름을 사용해 접근해야 함- 종종 상수 값으로 사용됨, 프로그램의 여러 부분에서 공통적으로 사용됨- 여러 스레드에서 동시에 접근할 수 있기 때문에 스레드 안정성을 보장해야 함   → 동기화를 통해 여러 스레드 간의 안전한 접근을 보장할 수 있음정적 멤버 선언- static 키워드를 추가하면 된다.public class 클래스명 { sta.. 2023. 8. 3.
[Java] this 키워드 this - 현재 객체를 가리키는 참조 변수 - 주로 클래스의 인스턴스 메서드 내에서 사용, 해당 메서드를 호출한 객체(인스턴스)를 가리킴 - 이를 통해 인스턴스 변수와 메서드를 참조하거나 인스턴스 메서드를 호출할 수 있음 특징 # 현재 객체의 참조 public class MyClass { private int value; public void setValue(int value) { this.value = value; // 현재 객체의 value에 전달된 값을 설정 } public int getValue() { return this.value; // 현재 객체의 value 반환 } } # 생성자에서 다른 생성자 호출 public class MyClass { private int value; public .. 2023. 8. 2.
[Java] 형변환 (Type conversion) 형변환 (Type conversion) - 데이터 타입을 다른 데이터 타입으로 변환하는 것 자동 형변환 (암시적 형변환, Explicit type conversion) - 작은 데이터 타입이 큰 데이터 타입으로 자동으로 변환되는 것 - 데이터 손실이나 오류를 방지하기 위해 자동으로 처리 int a = 7; long b = a; // int가 long으로 자동 형변환 강제 형변환 (명시적 형변환, Implicit type conversion) - 큰 데이터 타입을 작은 데이터 타입으로 변환할 때 사용 - 개발자가 명시적으로 변환을 지시해야 함 - 데이터 손실이 발생할 수 있으므로 주의 double x = 7.7; int y = (int)x; // double을 int로 명시적 형변환 # 강제 형변환 시 주.. 2023. 7. 28.
[Java] 변수 변수 (Variable) - 변하는 수 - 데이터를 저장하고 조작할 때 사용되는 메모리 공간 - 이름을 가지고 있고, 해당 이름을 통해 프로그램 내에서 데티어에 접근 할 수 있음 - 다양한 데이터 타입을 가질 수 있음 - 선언된 위치에 따라 범위와 수명이 결정 # 변수의 선언 - 변수를 정의하고 이름을 할당 - 변수의 타입을 지정 int num; // 정수형 변수 선언 String name; // 문자열 변수 선언 # 변수의 초기화 - 변수를 사용하기 전 값을 할당하여 초기화해야 함 - 선언된 변수에 값을 지정 num = 7; // 정수형 변수 초기화 name = "손흥민"; // 문자열 변수 초기화 # 변수의 선언 및 초기화 - 선언과 동시에 초기화 할 수 있다 int num = 7; // 정수형 변수.. 2023. 7. 27.
[Java] 제어문 : 조건문과 반복문 (if, switch, for, while) 조건문 if if (조건식) { if-실행문; // if 조건식에 해당된다면 if-실행문 실행 ... } else if (조건식) { else if-실행문; // else if 조건식에 해당된다면 else if-실행문 실행 ... } else { else-실행문; // 둘다 아니라면 else-실행문 실행 ... } 조건문 switch-case switch (조건식) { case 값1: 실행문; // 조건식이 값1과 일치하면 실행문 실행 break; // break문이 없으면 계속 다음 case로 넘어간다 case 값2: 실행문; // 조건식이 값2과 일치하면 실행문 실행 break; ... // 조건식의 결과값이랑 일치하는 case 값이 없으면 default의 실행문 실행 default: 실행문; // .. 2023. 7. 26.
[Java] 상수와 리터럴 상수 (Constant) - 변하지 않는 수 (원주율, 1년 12개월 등) - 변하지 말아야 할 데이터를 임시적으로 저장하기 위한 수단 상수의 선언과 초기화 final 자료형 상수명 = 값; - 초기화 이후 재할당 불가능 - 상수명은 대문자에 언더바(_)를 넣어 구분하는게 관례 리터럴 (Literal) - 변하지 않는 데이터 그 자체를 의미를 상수라고 생각하면 된다. 2023. 7. 25.
728x90