BlueHarmel
BlueHarmel Devlog
BlueHarmel
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (330)
    • Book (11)
    • Dev (29)
      • ArtCon (0)
      • ESTsoft 오르미 (29)
    • Study (290)
      • Web (18)
      • AWS (2)
      • 알고리즘 (1)
      • GameDev (1)
      • 정보처리기사 (201)
      • English (1)
      • Mathematics (24)
      • 머신러닝 (7)
      • 딥러닝 (10)
      • 네트워크 보안 (5)
      • R (4)
      • 컴퓨터 네트워크 (6)
      • 데이터베이스 (8)
      • 데이터 통신 (0)
      • 운영체제 (2)
      • TIL (0)
    • Project (0)
      • 개인 (0)
      • 단체 (0)

인기 글

hELLO · Designed By 정상우.
BlueHarmel

BlueHarmel Devlog

Dev/ESTsoft 오르미

클래스

2024. 2. 23. 10:57

1. 객체지향언어

  • 객체 지향 프로그래밍(OOP : Object Oriented Programming)
    • 객체들을 먼저 만들고, 이것들을 하나씩 조립하여 완성된 프로그램을 개발하는 기법
    • 프로그램을 보다 유연하고 변경이 용이하게 만들고, 코드의 재사용을 통해 반복적인 코드를 최소화해 유지보수 하는데 유리하다.
    • 특징
      1. 추상성 : 사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것
        1. 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
        1. 추상화를 구현하는 문법 요소 : 추상 클래스 / 인터페이스
        1. 인터페이스 : 어떤 객체의 역할만을 정의하여 객체들 간의 관계를 유연하게 연결하는 역할
          1. 어떤 객체가 수행해야 하는 핵심적인 역할만을 규정해두고, 실제적인 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 하도록 프로그램을 설계
          1. 역할과 구현의 분
      1. 상속 : 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
        1. 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상의 클래스의 속성과 기능들을 간편하게 사용할 수 있도록 한다.
        1. 공유하는 속성과 기능들을 한번만 정의하고 재사용이 가능해 반복적인 코드를 최소화 하고 공유하는 속성과 기능에 간편하게 접근가능
        1. 인터페이스 vs 상속
          1. 인터페이스 : 반드시 인터페이스에 정의된 추상 메서드의 내용이 하위 클래스에서 정의되어야 한다.
          1. 상속 : 상위 클래스의 속성과 기능들을 하위 클래스에서 그대로 받아 사용하거나 오버라이딩을 통해 선택적으로 재정의하여 사용가능
      1. 캡슐화 : 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
        1. 접근 제어자와 getter setter 를 통해 구현 가능
        1. 사용 이유
          1. 데이터 보호(getter setter) : 외부로부터 클래스에 정의된 속성과 기능들을 보호
          1. 데이터 은닉(접근 제어자) : 내부의 동작을 감추고 외부에는 필요한 부분만 노출
      1. 다형성 : 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질
        1. 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 특성
        1. 메서드 오버라이딩과 오버로드
        1. 넓은 범위의 타입, 즉 상위 클래스 타입의 참조 변수(Vehicle)로 관계있는 하위 클래스들(Car, MotorBike)을 참조할 수 있는 능력
        1. 인터페이스를 통해 간접적으로 연결되어 결합도가 낮아진다.

2. 클래스와 객체

  • 클래스 : 객체의 특징(속성, 기능)을 정해놓은 제품 설계도
    • 필드 : 객체의 데이터가 저장되는 곳
    • 메서드 : 객체의 동작에 해당하는 실행 블록
    • 생성자 : 객체 생성시 초기화 역할 담당
  • 객체 : 모든 실재하는 대상
    • 객체 지향 프로그래밍의 가장 기본적인 단위이자 시작점
    • 속성(state)과 기능(behavior)으로 구분한다
    • 이를 variable 과 function으로 정
  • 인스턴스 : 클래스에 의해서 만들어진 객체

  • 클래스와 객체 선언
    • 클래스 네이밍 규칙
      작성 규칙예시
      하나 이상의 문자로 이루어져야 한다.Car, SportsCar
      첫 번째 글자는 숫자가 올 수 없다.3Car (x)
      $ _ 외의 특수문자는 사용할 수 없다.$Car, _Car, @Car (x), #Car (x)
      자바 키워드는 사용할 수 없다.int (x), for (x)

3. 클래스의 구성 멤버 살피기(필드, 생성자, 메소드)

  • 필드(멤버 변수) :
    • 객체의 고유 데이터가 저장되는 곳
    • 클래스 전역에서 사용가능
    • 객체가 소멸되지 않는 한 객체와 함께 존재하는 변수
  • 생성자 :
    • new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당
    • 생성자 규칙
      1. 클래스명과 메서드명이 같다
      1. 리턴 타입을 정의하지 않는다
    • 생성자 앞에 접근제어자로 public 혹은 private 모두 올 수 있다.
    • 객체 생성 방법이 생성자 규칙과 맞지않는 경우(매개변수가 필요한데 주지 않은 경우), 오류가 발생한다.
    • 디폴트 생성자 : 생성자의 입력항목이 없고, 생성자 내부에 아무런 내용이 없는 생성자
      • 클래스에 생성자가 하나도 없다면, 컴파일러는 자동으로 디폴트 생성자를 추가한다.
      • 하나라도 있다면 디폴트 생성자 추가 X
    • 생성자 오버로딩
      • 클래스 내에 같은 이름의 함수를 여러개 선언하는 것
      • 입력항목이 다른 생성자를 여러개 만드는 것
      • 리턴타입이나 입력인자가 다른경우 오버로딩이 발생한다
  • 메소드
    • 클래스 내에 구현된 함수
    리턴타입  메소드이름([매개변수 선언, ...]) {  // 선언부
    
     // 실행블록
    
    }
    • 리턴타입 : 메소드가 실행 후 리턴하는 값의 타입을 말한다.
      • 리턴타입이 있어도 필요하지 않은 경우에 변수에 저장하지 않고 호출할 수 있다.
    • 매개 변수 : 메소드에 전달된 입력값을 저장하는 변수
    • 인수 : 메서드를 호출할 때 전달하는 입력값
    • 메소드 내에서 선언된 변수의 효력 범위 : 메소드 안에서만 사용
      public class Calculator {
          int prefixOperator(int a) { //call by value : 
              return ++a;
          }
      
          public static void main(String[] args) { 
              int a = 1;
              Calculator calculator = new Calculator();
              a = calculator.prefixOperator(a);
              System.out.println(a);          // a = 2로 출력되도록 메소드 수정하기
          }
      }
  • this : 객체 자기자신을 가리킬때 사용하는 키워드
    • 사용하는 경우
      • 생성자와 메소드의 매개변수 이름이 필드와 동일한 경우
      • 인스턴스의 필드임을 명시하고자 할 때
    public class Calculator {
    
        int a;  // 필드 a
    
        void postfixOperator() {
            this.a++;     // 본인 객체 접근시 this 사용
        }
    
        public static void main(String[] args) {
            Calculator cal = new Calculator();
            cal.a = 1;
            cal.postfixOperator();     // Before) cal.postfixOperator(cal);
            System.out.println(cal.a);
        }
    }

4. final 필드와 상수

  • final 필드 : 최종적인 필드
    • 초기값 지정이 되면 이것이 최종적인 값이 되어 프로그램 실행 도중에 수정이 불가능하다.
    • final 필드의 초기값을 줄 수 있는 방법
      1. 필드 선언 시
      1. 생성자에서도 초기화 가능
    • 프로그램을 수행하면서 그 값이 바뀌면 안 될 때 사용
    public class Person {
    	final String nation = "Korea";
    	String name;
    
    	public Person(String name) {
    		this.name = name;
    	}
    }
    
    public class PersonExample {
    	public static void main(String[] args) {
    		Person person = new Person("계백");
    
    		System.out.println(person.nation);
    		System.out.println(person.name);
    		
    	  person.nation = "을지문덕";   // Error: 컴파일 오류 발생. final 필드는 값 수정 불가
    	}
    	
    }
  • 상수 (static final) : 불변의 값을 저장하는 필드
    • 모두 대문자로 작성
    • 여러 단어를 잇는 경우 언더바(_)를 사용
    • 객체가 없어도 접근이 가능하다
    • final을 상수라고 부르지 않는다
      • 상수는 객체마다 저장할 필요가 없는 공용성을 띈다
      • 상수는 여러가지 값으로 초기화 할 수 없다.
    • static final 필드의 초기값을 줄 수 있는 방법
      1. 필드 선언 시
      1. 정적 블록에서 초기화

5. 접근 제어자

  • 캡슐화 : 클래스 안의 속성과 기능을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
  1. private
    1. 해당 클래스 안에서만 접근이 가능
  1. default
    1. 접근 제어자를 별도로 설정하지 않는 경우에 자동으로 설정
    1. 동일한 패키지 안에서만 접근이 가능
  1. protected
    1. 동일 패키지의 다른 클래스에서 접근 가능
    1. 해당 클래스를 상속받은 외부 패키지의 클래스에서도 접근이 가능
  1. public
    1. 어떤 클래스에서도 접근이 가능
    1. 유일하게 src 폴더 내에 모든 패키지에서 접근 가능
  • 클래스는 접근 제어자로 public 과 default 만 허용한다
    • default : 동일한 패키지에서만 클래스 접근
    • public : 외부 패키지에서도 접근을 허용

6. Getter, Setter 메소드

  • 객체 지향 프로그래밍에서 일반적으로 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다
    • 객체의 데이터를 외부에서 접근해 수정할 경우, 객체의 무결성이 깨질 수 있다
  • 이를 해결하기 위해 메소드를 통해 데이터를 변경하는 방법을 사용한다.
    • 데이터는 외부에서 접근할 수 없도록 막고, 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도
    • 메소드가 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문
  • Getter
    • 객체 외부에서 객체의 필드값을 사용하기 부적절한 경우, 메소드로 필드값을 가공할 수 있다.
    • 필드 타입이 Boolean 인 경우, getter 메소드명을 관례상 get이 아닌 is로 시작한다.
    public class Car {
    		private int speed;
    		
    		public double getSpeed() {
    				double km = speed * 1.6;
    				return km;
    		}
    }
  • Setter
    • 필드값은 private로 막고, Setter 메소드를 public으로 공개
    public class Car {
    		private int speed;
    		
    		public void setSpeed(int speed) {
    				if (speed < 0) {
    						this.speed = 0;
    						return;
    				} else {
    						this.speed = speed;
    				}
    		}
    }

7. 어노테이션

  • 메타데이터 : 애플리케이션이 처리할 데이터가 아닌, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보
  • 용도
    1. 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공
    1. 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공
    1. 실행 시(런타임 시) 특정 기능을 실행하도록 정보를 제공
  • 어노테이션 타입 정의와 적용
    public @interface AnnotationName {
    		// element를 멤버로 가질 수 있다.
    		// int, double, Stirng, Enum, Class, 이들의 배열타입
    		// 메소드처럼 ()를 붙여줘야 한다.
    		String elementNameOne();
    		int elementNameTwo() default 5;
    }
    
    @AnnotationName
    @AnnotationName(elementNameOne = "값", elementNameTwo = 2);
    또는
    @AnnotationName(elementNameOne = "값")
    @AnnotationName("값");
    • 디폴트 값이 없는 엘리먼트는 반드시 값을 기술해야 한다.
  • 어노테이션 적용 대상

    클래스, 필드, 메소드만 어노테이션을 적용할 수 있고 생성자는 적용할 수 없습니다.

    ElementType 열거 상수적용 대상
    TYPE클래스, 인터페이스, 열거타입
    ANNOTATION_TYPE어노테이션
    FIELD필드
    CONSTRUCTOR생성자
    METHOD메소드
    LOCAL_VARIABLE로컬 변수
    PACKAGE패키지
    • 적용대상을 지정할때는 @Target 어노테이션을 사용
      @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
      public @interface AnnotationName {
      }

8. 추가

  • Call by value / Call by reference : https://inpa.tistory.com/entry/JAVA-☕-자바는-Call-by-reference-개념이-없다-❓
  • 리턴타입만 다른경우
    • 리턴타입은 JVM이 메소드를 선택할때 도움을 주지 못한다.
    • System.out.println이 대표적인 예
    • 혼자 공부하는 자바 264페이지 참조
    1. 매개 변수의 타입, 순서를 변경하여 같은 이름의 함수를 여러 번 정의가능. ⇒ 단, 메서드이름 앞에 자료형이 달라지면 그건 아예 다른 메서드라고 인식.
    • 타입 일치 : 인수의 타입은 함수가 정의한 매개 변수의 타입과 불일치시 오류를 발생 시킬 수 있음.
    • 순서 중요 : 인수는 함수가 정의된 매개 변수의 순서에 따라 전달이 필요.
    • 객체지향 프로그래밍 추가 설명 : https://www.codestates.com/blog/content/객체-지향-프로그래밍-특징

9. Daily Quiz

Daily Quiz 01/31

'Dev > ESTsoft 오르미' 카테고리의 다른 글

인터페이스  (0) 2024.02.23
상속  (0) 2024.02.23
참조자료형  (0) 2024.02.22
연산자 / 조건문과 반복문  (0) 2024.02.22
변수  (0) 2024.02.22
    BlueHarmel
    BlueHarmel
    Interested in Mathematics, Foreign Language, and "Programming"

    티스토리툴바