[코드프레소 웹 개발 체험단] - Java 프로그래밍 초급
- 코드프레소 Java 웹 개발 체험단 활동 중
- 코드프레소 이러닝 강의 수강 중 'Java 프로그래밍 초급'
이 글은 코드프레소 Java 웹 개발 체험단 강의 중 'Java 프로그래밍 초급' 강의 내용입니다.
[ 객체지향의 기초 개념 ]
- 절차 지향 vs 객체 지향
절차 지향 : 시스템의 행위에 집중
객체 지향 : 시스템에 참여하는 요소들에 집중
- 클래스
- Java 프로그램의 기본 단위
- 1개 이상의 클래스로 구성됨. 일반적으로 1개의 클래스는 1개의 Java 파일
- 클래스로 객체를 생성 (객체를 어떻게 생성할 지에 대한 정보를 가진 설계도)
( * 객체 : 사물 또는 개념 )
객체는 속성(=데이터)과 행동(=메소드)을 가지고 있음
예를 들어, 강사라는 객체에 대해서
강사의 속성은 나이, 키, 이름, 전공, 주소 등...이 될 수 있고, 행동은 수업 가르치기, 채점하기, 밥 먹기, 잠자기 등...이 된다.
- Java 클래스 선언 문법
[접근제어자] class 클래스이름 {
타입 변수이름1;
타입 변수이름2;
...
리턴타입 메소드이름1(파라미터) {
//메소드 구현 코드
}
...
}
- class 키워드 사용
- class 안에 변수는 멤버 변수(인스턴스 변수)라고 지칭
- 메소드는 메소드(인스턴스 메소드)라고 지칭
- class 이름은 대문자로 시작하며 Camel 작명법을 사용하고 주로 명사를 쓴다.
- 이름은 의미있는 단어로 작명
(예시) User class 생성 (User.java)
public class User {
String name;
int age;
String address;
int weight;
}
- 클래스를 만들어놓고 클래스로부터 객체를 생성할 때는
클래스명 변수명 = new 클래스명( );
new 키워드를 사용해 객체를 생성하고 변수명에는 객체에 대한 참조 정보가 저장된다.
위의 user 클래스로 예를 들면,
User kim = new User();
- 객체 멤버 변수에 접근할 때는 점 연산자( . ) 사용
객체참조변수명.멤버변수명
객체 멤버 변수에 새로운 값을 저장할수도 있고 변수에 저장되어 있는 값을 사용할 수도 있다.
User kim = new Uesr();
kim.age = 20; // kim이라는 객체의 age에 20이라는 값 저장
- 메소드
( 메소드 리턴값 파라미터, 오버로딩,
함수와 비슷하지만 메소드는 특정 객체 내부에 존재, 객체 멤버 변수에 대한 연산 가능
[접근제어자] 리턴타입 메소드이름(파라미터1, 파라미터2,...) {
메소드 구현코드;
...
[return 리턴값];
}
- input은 없거나 1개 이상의 파라미터
- output은 없거나 return 값으로 표시
- 리턴 값이 없을 경우 리턴 타입은 void
- 메소드의 이름은 소문자로 시작하고 Camel 표기법을 사용하며 동사를 보통 사용
객체참조변수명.메소드명(인자)
점 연산자를 사용해 메소드를 실행
* this : 객체 내부의 this는 객체 자신을 의미
- 접근제어자
객체 내부에는 외부에서 함부로 접근해 값을 변경하면 안되는 속성이 존재 → 속성을 보호하기 위해 접근 제어자 사용
public, private, protected, default가 존재
- public : 모든 곳에서 접근 가능
- protected : 상속관계에서 자식이 부모 멤버에 접근 가능
- private : 외부에서 접근 불가, 객체 내부에선 접근 가능, 보통 멤버 변수는 private로 지정
* private 멤버 변수의 값을 변경/사용하고 싶을 때 : setter, getter 메소드 사용
- default : 접근 제어자 명시하지 않을 때 해당, 같은 패키지 내에서만 접근 가능
- 생성자
public 클래스이름(파라미터1, 파라미터2, ...) {
생성자 내부 코드;
}
- 생성자의 이름은 클래스 이름과 동일
- 객체가 생성되는 시점에 호출되고 초기화를 위해 사용
- 멤버 변수를 명시하지 않는 경우 숫자형은 0, boolean은 false, string 참조 변수는 null이 저장된다
생성자를 추가하지 않은 경우 Default(기본) 생성자를 제공
User kim = new User(); //기본 생성자
[ 객체지향 고급 ]
- 상속
(1) 상속
일반화된 클래스(부모 클래스)를 재사용하여 새로운 구체적인 클래스(자식 클래스)를 생성하는 것
자식 클래스는 부모 클래스의 모든 멤버변수와 메소드를 상속받음
상속을 거듭할수록 자식 클래스의 멤버변수와 메소드는 늘어나거나 같음
상속 횟수에는 제한 없음
class 자식 클래스명 extends 부모 클래스명 { ... }
위 코드를 사용해 상속받을 수 있다.
(예시)
class User { // 부모 클래스인 User 클래스 선언
String name;
int age;
String address;
void printInfo() {
System.out.println("이름은 : " + name);
System.out.println("주소는 : " + address);
System.out.println("나이는 : " + age);
}
class PaidUser extends User { //User 클래스(부모 클래스)를 상속받은 PaidUser 클래스(자식 클래스)
String membership;
}
* 단일 상속 : Java는 다중상속을 허용하지 않음. 하나의 클래스로부터만 상속 받을 수 있음.(예시)
class User { //User 클래스
int age;
}
class Person { //Person 클래스
String name;
}
// 자식 클래스인 Admin 클래스 생성
class Admin extends User, Person { //에러발생 (다중상속 불가능)
String phoneNumber;
}
User, Person이라는 클래스가 정의되어 있을 때 클래스를 상속받는 자식 클래스인 Admin 클래스는 둘 중 하나의 클래스만 상속받을 수 있다.
(2) 상속 관계와 접근 제어
상속 관계에서도 접근을 제한하기 위해 접근 제어자(public, private, protected, default) 사용
- private : 외부로부터 접근 제한, 같은 클래스 내에서만 접근 가능, 자식 클래스에서도 접근 제한.
* private 멤버변수에 대해 외부 접근이 필요한 경우 public setter, getter 메소드 사용
- protected : 외부 접근을 제한, 자식 클래스에선 접근 가능.
(3) 상속 관계의 생성자
자식 클래스 객체 생성 시, 부모 클래스의 기본 생성자 자동 호출. (부모 생성자가 정의되어있지 않은 경우)
super();
super();를 사용해 부모 클래스의 기본 생성자 호출
☞ 자식 클래스에서 부모 클래스를 호출하지 않으면 Java 컴파일러가 super();를 자식 클래스 생성자 첫 번째 라인에 자동으로 삽입.
class User { // 부모 클래스
}
class PaidUser extends User { // 자식 클래스
PaidUser() {
super(); // 부모 클래스의 기본 생성자 생성
System.out.println("PaidUser 기본 생성자 생성"); // 자식 클래스의 기본 생성자 생성
}
}
부모 클래스의 생성자가 정의되어있으면 자식 클래스 객체 생성 시 생성자와 파라미터에 맞게 부모 생성자 선언해줘야함.
super를 사용해 부모 클래스의 멤버 변수에 접근할 수도 있음.
class User { // 부모 클래스
String name;
int value;
}
class PaidUser extends User { // 자식 클래스
String number;
int value;
}
부모 클래스와 자식 클래스에 동일한 변수인 value가 있을 때 자식 클래스의 메소드에 아래 코드를 넣게 되면
public setValue (int parentvalue, int myvalue) {
super.value = parentvalue;
this.value = myvalue;
}
parentvalue는 부모 클래스인 User 클래스의 value에, myvalue는 자식 클래스인 PaidUser 클래스의 value에 값이 저장된다.
- 코드프레소 URL : https://www.codepresso.kr/