본문 바로가기

전체 글376

[Java] 패키지의 사용 패키지란? 패키지를 간단히 말하면 클래스 파일의 묶음입니다. 패키지를 만들면 프로젝트 하위에 물리적으로 디렉토리가 생성됩니다. 프로젝트를 수행할 때 패키지의 계층 구조를 구성하는 것은 전체 프로젝트의 소스 코드를 어떻게 관리할지와 관련이 있습니다. 패키지가 단순히 클래스 묶음이 아닌 프로젝트 전체 소스 코드를 구성하는 계층 구조가되고, 이 계층 구조를 잘 구성해야 소스 코드 관리와 유지보수가 편리하다는 사실을 잊지 말아야 합니다. 아래 사진은 Eclipse 라는 툴에서는 패키지를 생성하는 방법입니다. 이클립스가 아닌 visualstudio를 기준으로 설명드리겠습니다. 2개의 클래스와 1개의 실행 클래스가 있습니다. 패키지를 컴파일 하겠습니다. javac -d. -encoding utf-8 PackB.ja.. 2022. 9. 29.
[Java] 정보 은닉 / 접근 제어자 / public / protected / private 클래스를 만들고 멤버 변수, 메서드, 생성자 등을 만들 때 public 예약어를 흔히 사용합니다. 객체 지향 프로그램에서는 접근 제어자를 통해 접근 권한을 부여할 수 있습니다. 접근 제어자 설명 public 외부 클래스 어디에서나 접근 가능 protected 같은 패키지 내부 또는 상속 관계의 클래스에서 접근 가능하며, 그 외 클래스는 접근 불가 명시하지 않은 경우 default, 같은 패키지 내부에서만 접근 가능 private 같은 클래스 내부에서만 접근 가능 멤버 변수에 private 접근 제어자를 작성해주고, 호출 한다면? 접근할 수 없다는 오류가 발생 멤버 변수에 private 접근 제어자를 주석처리 한다면? public, protected 등과 같은 접근 제어자로 설정된 변수는 출력 가능합니다... 2022. 9. 29.
[Java] 메서드 재정의 / 오버라이딩 / overriding 메서드 오버라이딩(method overriding)란? 예를 들어, 상위 클래스에 viewParent() 라는 이름을 가진 메서드가 정의되어 있습니다. 하위 클래스에서도 viewParent() 라는 이름을 가진 메서드를 사용해야 하는데, 내용이 맞지 않을 경우에 하위 클래스에서 이 메서드를 재정의할 수 있습니다. 이를 메서드 오버라이딩(method overriding)이라고 합니다. 오버라이딩의 조건은 반환형, 메서드 이름, 매개변수의 개수, 매개변수의 자료형이 반드시 같아야 합니다. 그렇지 않으면 자바 컴파일러는 재정의한 메서드를 기존 메서드와 다른 메서드로 판단합니다. 아래에서 상위 클래스와 이를 상속받는 하위 클래스로 구분합니다. 상위 클래스를 상속 받았으니, 상위 클래스의 변수와 메서드 호출은 문.. 2022. 9. 29.
[Java] this에 관해서 this 란? 생성된 인스턴스 스스로를 가르키는 예약어입니다. 아래 사진을 같이 보시겠습니다. BirthDay 클래스를 통해 인스턴스를 생성 했습니다. BirthDay 클래스의 생성자는 자료형이 문자열인 "name"인 매개변수입니다. 실행 클래스에서 생성자에 "Son"이라는 문자열을 넣었고, 초기화가 되었을거라고 생각되어, "name"을 호출해보겠습니다. 컴파일 오류가 발생하지 않았지만, 아무 내용도 출력되지 않았습니다. 이 상황에 대해서 자세히 알아보겠습니다. ① 생성자에 "Son"이라는 인자 값을 통해 매개변수에 전달 ② 생성자는 "Son" 이라는 문자열을 입력받음 ③ "BirthDay" 클래스의 멤버 변수 "name" 을 "Son"으로 초기화 ④ 위에서 초기화된 인스턴의 name 값을 호출 하지만,.. 2022. 9. 28.
[Java] 상속에 관해서 / IS-A 관계 / HAS-A 관계 / extends / Annotation(애노테이션)이란? / @Override / @Deprecated 상속(inheritance)이란? 상속은 우리가 일반적으로 알 듯 무엇인가를 물려받는다는 의미입니다. 부모에게 재산을 상속받으면 상속받은 재산을 자신의 것으로 사용할 수 있듯, B 클래스가 A 클래스를 상속받으면 B 클래스는 A 클래스의 멤버 변수와 메서드를 사용할 수 있습니다. 클래스 상속 문법 상속을 구현할 때는 extends 예약어를 사용합니다. 아래 코드는 'B 클래스가 A 클래스를 상속받는다' 라고 말하며, A 클래스가 가지고 있는 속성이나 기능을 추가로 확장하여 B클래스를 구현한다는 뜻으로 생각하면 됩니다. class B extends A { } 그렇다면, 객체지향 프로그래밍에서는 상속을 언제 사용할까요? 두가지 관계를 설명드리겠습니다. 상속은 IS-A 관계에서 사용하는 것이 좋습니다. IS-.. 2022. 9. 28.
[Java] static 변수에 대해서 / 클래스 멤버 변수 / 인스턴스 멤버변수 static 변수란? 클래스 전반에서 공통으로 사용할 수 있는 기준 변수가 있어야 합니다. 클래스에서 공통으로 사용하는 변수를 'static 변수' 로 선언합니다. static 변수의 정의와 사용방법 '정적 변수' 라고도 합니다. static 변수는 클래스 내부에서 선언하지만, 다른 멤버 변수처럼 인스턴스가 생성될 때마다 새롭게 생성되는 변수가 아닙니다. static 변수는 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 메모리에 할당되며, 모든 인스턴스가 공유합니다. 클래스 파일에서는 public class Student01_2 { public static int studentID = 100; public static int schoolClass = 2; public String studentNam.. 2022. 9. 28.
[Java] 얕은 복사에 자세히 알아보면? / Shallow Copy Shallow Copy(얕은 복사) Shallow Copy(얕은 복사)는 '주소값'을 복사함으로, 참조하고 있는 실제값이 같습니다. 아래와 같은 클래스 파일을 만들었습니다. "bal1" 이라는 이름을 가진 인스턴스를 생성했습니다. 또한, 메서드를 통해 name, money를 정해줬습니다. 인스턴스를 "bal1Copy" 라는 이름을 가진 인스턴스에 복사했습니다. 이에, "bal1" changeName 메서드를 통해 name을 변경했고, spenMoney 메서드를 통해 money를 지출했습니다. 그렇다면 "bal1"은 tom 이라는 name과 900원을 가지고 있고, "bal1Copy"은 변경 전의 상황인 bob, 1000원을 가지고 있어야 한다고 생각이 듭니다. 하지만, 현재 상황은 어떻게 될까요? 출력 .. 2022. 9. 28.
[Java] 가변 인자 / String ... args / 인자(argument) 여러 개 [Java] 메서드 오버로딩(Method OverLoading)에 대해서 오버로딩(OverLoading)이란? 사전적인 의미는 '과적하다'라는 뜻을 가지고 있습니다. 기존 C언어에서는 "함수명이 고유하게 존재해야 한다." 라는 것을 시작으로 하나의 함수는 하나의 기능만을 구 starting-coding.tistory.com 하나의 클래스 안에서 같은 메소드 이름이 있더라도, 매개변수가 다르다면 메소드를 정의할 수 있다고 오버로딩에 대해서 배웠습니다. 그렇다면, 메소드 이름이 같은, 매개변수의 개수를 달리해야하는 상황에서, 메소드를 무한히 정의를 해줘야할까? 라는 의문이 들겁니다. void doFunc( String a, String b ) { 코드; } void doFunc( String a, Strin.. 2022. 9. 27.
[Java] 정수(integer), operator(연산자), 정수(integer) / 숫자, 연산자, 숫자를 입력받아 연산된 결과를 출력하는 Method 선언 및 호출 전체 소스코드(if else문을 이용) class Util02 { void doCalculator ( int data1, String data2, int data3 ) { int result; if( data2 == "+") { result = (data1 + data3); System.out.println( result ); } else if (data2 == "X") { result = (data1 * data3); System.out.println( result ); } else if (data2 == "-") { result = (data1 - data3 ); System.out.println( result ); } else if ( data2 == "/") { result = (data1 / d.. 2022. 9. 27.