티스토리 뷰

공부와개발사이/Java

짬날때 자바(2)

/daydreamer 2022. 2. 22. 17:08

 

https://wikidocs.net/book/31

 

점프 투 자바

**초보 프로그래머를 위한 자바 입문서** 이 책은 문법위주의 지식보다는 이해중심의 지식을 전달하는 것을 주 목적으로 한다. 예를 들어 자바에서 잘 파악하기 힘든 개념 ...

wikidocs.net

 

객체지향 프로그래밍
클래스/객체/인스턴스/상속/인터페이스/다형성/추상화
 
 
클래스
A클래스로 만든 별개의 A1 A2(객체)
다른 객체와 상관없이 독립적인 값을 유지
클래스를 계속 생성할 필요없이
클래스로 만든 객체를 생성하면 해결
 
 
클래스에 의해서 만들어진 객체를 인스턴스라고 한다
객체와 인스턴스의 차이는?
객체 자체를 이야기 할때는 (객체 Animal cat = new Animal() )
특정 객체가 어떤 클래스의 객체인지를 관계위주로 설명할 때 (cat 이라는 객체는 Animal의 인스턴스다 )
 
클래스에 변수선언 후 메소드 (setName 과 같은 ) 선언 = 대입할 수 있게
 
클래스에서 가장 중요한 부분은 객체변수의 값이 독립적으로 유지된다는 점이다(클래스의 존재이유)
 
 
메소드
다른 프로그래밍 언어에는 함수라는 것이 별도로 존재
자바는 클래스를 떠나 존재하는것은 있을 수 없음 - 클래스 내에 함수가 존재
클래스 내의 함수를 메소드라고 한다
메소드 : 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것
 
 
매개변수와 인수
매개변수 (파라미터) : 메소드에 입력으로 전달된 값을 받는 변수
인수 : 메소드를 호출할때 전달하는 입력값
 
메소드의 구조
리턴자료형 메소드명(입력자료형 매개변수, ...){
 
return 리턴값 ;
}
 
입력과 출력이 모두 있는 메소드
입력과 출력이 모두 없는 메소드
입력은 없고 출력은 있는 메소드
입력은 있고 출력은 없는 메소드
 
일반적인 메소드
입력값이 있고 리턴값이 있는 메소드
int sum(int a, int b){
return a+b;
}
 
Sample sample = new Sample();
sample.sum(3,4);
 
입력값이 없는 메소드
String say(){
return "HI";
}
 
 
 
리턴값이 없는 메소드
void sum(int a , int b){
System.out.println(a + "과 " + b + "의 합은 " + (a+b) + "입니다. ");
}
 
 
 
입력값도 리턴값도 없는 메소드
Sample sample = new Sample();
sample.say();
 
public class Sample{
void say(){
System.out.println("Hi");
}
}
 
 
return의 또 다른 쓰임새
특별한 경우에 메소드를 빠져나가기 원할때 return을 단독으로 사용하여
메소드를 즉시 빠져나감(like break;) => 리턴 자료형이 void일때만 가능
 
 
메소드 내에서 쓰이는 변수는 메소드 밖의 변수들과는 상관없다
= 메소드 내에서 쓰이는 변수 = 로컬변수
 
 
Call by value(기본 자료형)
메소드에 값을 전달하는 것과
Call by reference(객체 전달)
# 동일한 객체를 가르키고 있어도 main 에서의 reference 값과 다른 메소드에서의 reference값은 다름
객체를 전달하는 것은 다름
= 메소드에 객체를 전달하는 경우 메소드에서 객체의 객체변수(속성)값을 변경할 수 있음
 
 
 
 
상속(extends)
Dog 클래스가 Animal 클래스를 상속받는다
 
class Animal{
 
}
class Dog extends Animal{
 
}
 
Object 클래스
자바에서 만드는 모든 클래스는 Object를 상속받음
IS A  관계
Dog Is a Animal
 
 
메소드 오버라이딩
부모 클래스의 메소드를 자식 클래스가 동일한 형태로 또 다시 구현하는 것 (변경)
다른 클래스에서 실행
메소드 오버로딩
입력항목이 다른 경우 동일한 이름의 메소드를 구현하는 것 (추가)
같은 클래스에서 실행
 
자바는 다중상속 없음!@
 
 
 
생성자(Constructor)
객체가 생성될 때 객체변수에 값을 무조건 설정해야만 객체가 생성되도록 하는 방법 : 생성자 사용
 
생성자의 규칙
  1. 클래스명과 메소드명이 동일하다
  2. 리턴타입을 정의하지 않는다 (void도 사용하지 않음)
 
생성자가 있을 때는 객체 선언시 생성자의 타입을 맞춰줘야 한다
 
디폴트 생성자
Dog(){
 
}
생성자의 입력 항목이 없고 생성자 내부에도 아무 내용이 없는 생성자
클래스에 생성자가 하나도 없다면 컴파일러는 자동으로 디폴트생성자를 추가함
=>오버로딩을 한 경우에는 디폴트 생성자가 자동으로 생성되어지지않음
=>> new 로 객체를 생성할 때 디폴트 생성자(기본생성자) 호출됨
=>> 매개변수가 있는 생성자(예시)를 정의해 놓고 (기본생성자는 정의 안함)
메인 클래스에서 new Car(); 이런식으로 기본 생성자를 호출하면 오류남
왜냐면 ======> 생성자가 있는 경우라서 자동으로 디폴트 생성자를 추가하지 않기 때문이다.
 
 
 
 
인터페이스(Interface)
 
 
 
 
*동물에 대한 메소드를 계속적으로 추가해야한다면 (기린/사자/...)
동물이라는 인터페이스를 생성해서 세부 동물에 대한 클래스를 작성할때 마다 동물이라는 인터페이스를 구현(implements)하도록 설정
 
인터페이스에서 정의한 상수는 public static final 을 생략해도 자동으로 적용됨
 
 
 
 
다형성(Polymorphism)
객체지향 프로그래밍의 특징
하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것
 
instanceof : 어떤 객체가 특정 클래스의 객체인지 조사
animal instanceof Tiger => animal 객체는 Tiger 클래스로 만들어진 객체인가?
 
인터페이스는 , 를 이용하여 여러개를 implements (구현) 할 수 있다
 
인터페이스는 일반 클래스와 달리 extends 를 이용하여 여러개의 인터페이스 상속(다중상속)이 가능하다
(* 일반 클래스는 단일상속만 가능)
 
 
추상클래스(Abstract Class)
인터페이스 역할도 하면서 클래스의 기능도 가지고 있는 클래스
https://wikidocs.net/219객체지향 프로그래밍
클래스/객체/인스턴스/상속/인터페이스/다형성/추상화
 
 
클래스
A클래스로 만든 별개의 A1 A2(객체)
다른 객체와 상관없이 독립적인 값을 유지
클래스를 계속 생성할 필요없이
클래스로 만든 객체를 생성하면 해결
 
 
클래스에 의해서 만들어진 객체를 인스턴스라고 한다
객체와 인스턴스의 차이는?
객체 자체를 이야기 할때는 (객체 Animal cat = new Animal() )
특정 객체가 어떤 클래스의 객체인지를 관계위주로 설명할 때 (cat 이라는 객체는 Animal의 인스턴스다 )
 
클래스에 변수선언 후 메소드 (setName 과 같은 ) 선언 = 대입할 수 있게
 
클래스에서 가장 중요한 부분은 객체변수의 값이 독립적으로 유지된다는 점이다(클래스의 존재이유)
 
 
메소드
다른 프로그래밍 언어에는 함수라는 것이 별도로 존재
자바는 클래스를 떠나 존재하는것은 있을 수 없음 - 클래스 내에 함수가 존재
클래스 내의 함수를 메소드라고 한다
메소드 : 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것
 
 
매개변수와 인수
매개변수 (파라미터) : 메소드에 입력으로 전달된 값을 받는 변수
인수 : 메소드를 호출할때 전달하는 입력값
 
메소드의 구조
리턴자료형 메소드명(입력자료형 매개변수, ...){
 
return 리턴값 ;
}
 
입력과 출력이 모두 있는 메소드
입력과 출력이 모두 없는 메소드
입력은 없고 출력은 있는 메소드
입력은 있고 출력은 없는 메소드
 
일반적인 메소드
입력값이 있고 리턴값이 있는 메소드
int sum(int a, int b){
return a+b;
}
 
Sample sample = new Sample();
sample.sum(3,4);
 
입력값이 없는 메소드
String say(){
return "HI";
}
 
 
 
리턴값이 없는 메소드
void sum(int a , int b){
System.out.println(a + "과 " + b + "의 합은 " + (a+b) + "입니다. ");
}
 
 
 
입력값도 리턴값도 없는 메소드
Sample sample = new Sample();
sample.say();
 
public class Sample{
void say(){
System.out.println("Hi");
}
}
 
 
return의 또 다른 쓰임새
특별한 경우에 메소드를 빠져나가기 원할때 return을 단독으로 사용하여
메소드를 즉시 빠져나감(like break;) => 리턴 자료형이 void일때만 가능
 
 
메소드 내에서 쓰이는 변수는 메소드 밖의 변수들과는 상관없다
= 메소드 내에서 쓰이는 변수 = 로컬변수
 
 
Call by value(기본 자료형)
메소드에 값을 전달하는 것과
Call by reference(객체 전달)
# 동일한 객체를 가르키고 있어도 main 에서의 reference 값과 다른 메소드에서의 reference값은 다름
객체를 전달하는 것은 다름
= 메소드에 객체를 전달하는 경우 메소드에서 객체의 객체변수(속성)값을 변경할 수 있음
 
 
 
 
상속(extends)
Dog 클래스가 Animal 클래스를 상속받는다
 
class Animal{
 
}
class Dog extends Animal{
 
}
 
Object 클래스
자바에서 만드는 모든 클래스는 Object를 상속받음
IS A  관계
Dog Is a Animal
 
 
메소드 오버라이딩
부모 클래스의 메소드를 자식 클래스가 동일한 형태로 또 다시 구현하는 것 (변경)
다른 클래스에서 실행
메소드 오버로딩
입력항목이 다른 경우 동일한 이름의 메소드를 구현하는 것 (추가)
같은 클래스에서 실행
 
자바는 다중상속 없음!@
 
 
 
생성자(Constructor)
객체가 생성될 때 객체변수에 값을 무조건 설정해야만 객체가 생성되도록 하는 방법 : 생성자 사용
 
생성자의 규칙
  1. 클래스명과 메소드명이 동일하다
  2. 리턴타입을 정의하지 않는다 (void도 사용하지 않음)
 
생성자가 있을 때는 객체 선언시 생성자의 타입을 맞춰줘야 한다
 
디폴트 생성자
Dog(){
 
}
생성자의 입력 항목이 없고 생성자 내부에도 아무 내용이 없는 생성자
클래스에 생성자가 하나도 없다면 컴파일러는 자동으로 디폴트생성자를 추가함
=>오버로딩을 한 경우에는 디폴트 생성자가 자동으로 생성되어지지않음
=>> new 로 객체를 생성할 때 디폴트 생성자(기본생성자) 호출됨
=>> 매개변수가 있는 생성자(예시)를 정의해 놓고 (기본생성자는 정의 안함)
메인 클래스에서 new Car(); 이런식으로 기본 생성자를 호출하면 오류남
왜냐면 ======> 생성자가 있는 경우라서 자동으로 디폴트 생성자를 추가하지 않기 때문이다.
 
 
 
 
 
 
 
인터페이스(Interface)
 
 
 
 
*동물에 대한 메소드를 계속적으로 추가해야한다면 (기린/사자/...)
동물이라는 인터페이스를 생성해서 세부 동물에 대한 클래스를 작성할때 마다 동물이라는 인터페이스를 구현(implements)하도록 설정
 
인터페이스에서 정의한 상수는 public static final 을 생략해도 자동으로 적용됨
 
 
 
 
다형성(Polymorphism)
객체지향 프로그래밍의 특징
하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것
 
instanceof : 어떤 객체가 특정 클래스의 객체인지 조사
animal instanceof Tiger => animal 객체는 Tiger 클래스로 만들어진 객체인가?
 
인터페이스는 , 를 이용하여 여러개를 implements (구현) 할 수 있다
 
인터페이스는 일반 클래스와 달리 extends 를 이용하여 여러개의 인터페이스 상속(다중상속)이 가능하다
(* 일반 클래스는 단일상속만 가능)
 
 
추상클래스(Abstract Class)
인터페이스 역할도 하면서 클래스의 기능도 가지고 있는 클래스
https://wikidocs.net/219클래스/객체/인스턴스/상속/인터페이스/다형성/추상화
 
 
클래스
A클래스로 만든 별개의 A1 A2(객체)
다른 객체와 상관없이 독립적인 값을 유지
클래스를 계속 생성할 필요없이
클래스로 만든 객체를 생성하면 해결
 
 
클래스에 의해서 만들어진 객체를 인스턴스라고 한다
객체와 인스턴스의 차이는?
객체 자체를 이야기 할때는 (객체 Animal cat = new Animal() )
특정 객체가 어떤 클래스의 객체인지를 관계위주로 설명할 때 (cat 이라는 객체는 Animal의 인스턴스다 )
 
클래스에 변수선언 후 메소드 (setName 과 같은 ) 선언 = 대입할 수 있게
 
클래스에서 가장 중요한 부분은 객체변수의 값이 독립적으로 유지된다는 점이다(클래스의 존재이유)
 
 
메소드
다른 프로그래밍 언어에는 함수라는 것이 별도로 존재
자바는 클래스를 떠나 존재하는것은 있을 수 없음 - 클래스 내에 함수가 존재
클래스 내의 함수를 메소드라고 한다
메소드 : 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것
 
 
매개변수와 인수
매개변수 (파라미터) : 메소드에 입력으로 전달된 값을 받는 변수
인수 : 메소드를 호출할때 전달하는 입력값
 
메소드의 구조
리턴자료형 메소드명(입력자료형 매개변수, ...){
 
return 리턴값 ;
}
 
입력과 출력이 모두 있는 메소드
입력과 출력이 모두 없는 메소드
입력은 없고 출력은 있는 메소드
입력은 있고 출력은 없는 메소드
 
일반적인 메소드
입력값이 있고 리턴값이 있는 메소드
int sum(int a, int b){
return a+b;
}
 
Sample sample = new Sample();
sample.sum(3,4);
 
입력값이 없는 메소드
String say(){
return "HI";
}
 
 
 
리턴값이 없는 메소드
void sum(int a , int b){
System.out.println(a + "과 " + b + "의 합은 " + (a+b) + "입니다. ");
}
 
 
 
입력값도 리턴값도 없는 메소드
Sample sample = new Sample();
sample.say();
 
public class Sample{
void say(){
System.out.println("Hi");
}
}
 
 
return의 또 다른 쓰임새
특별한 경우에 메소드를 빠져나가기 원할때 return을 단독으로 사용하여
메소드를 즉시 빠져나감(like break;) => 리턴 자료형이 void일때만 가능
 
 
메소드 내에서 쓰이는 변수는 메소드 밖의 변수들과는 상관없다
= 메소드 내에서 쓰이는 변수 = 로컬변수
 
 
Call by value(기본 자료형)
메소드에 값을 전달하는 것과
Call by reference(객체 전달)
# 동일한 객체를 가르키고 있어도 main 에서의 reference 값과 다른 메소드에서의 reference값은 다름
객체를 전달하는 것은 다름
= 메소드에 객체를 전달하는 경우 메소드에서 객체의 객체변수(속성)값을 변경할 수 있음
 
 
 
 
상속(extends)
Dog 클래스가 Animal 클래스를 상속받는다
 
class Animal{
 
}
class Dog extends Animal{
 
}
 
Object 클래스
자바에서 만드는 모든 클래스는 Object를 상속받음
IS A  관계
Dog Is a Animal
 
 
메소드 오버라이딩
부모 클래스의 메소드를 자식 클래스가 동일한 형태로 또 다시 구현하는 것 (변경)
다른 클래스에서 실행
메소드 오버로딩
입력항목이 다른 경우 동일한 이름의 메소드를 구현하는 것 (추가)
같은 클래스에서 실행
 
자바는 다중상속 없음!@
 
 
 
생성자(Constructor)
객체가 생성될 때 객체변수에 값을 무조건 설정해야만 객체가 생성되도록 하는 방법 : 생성자 사용
 
생성자의 규칙
  1. 클래스명과 메소드명이 동일하다
  2. 리턴타입을 정의하지 않는다 (void도 사용하지 않음)
 
생성자가 있을 때는 객체 선언시 생성자의 타입을 맞춰줘야 한다
 
디폴트 생성자
Dog(){
 
}
생성자의 입력 항목이 없고 생성자 내부에도 아무 내용이 없는 생성자
클래스에 생성자가 하나도 없다면 컴파일러는 자동으로 디폴트생성자를 추가함
=>오버로딩을 한 경우에는 디폴트 생성자가 자동으로 생성되어지지않음
=>> new 로 객체를 생성할 때 디폴트 생성자(기본생성자) 호출됨
=>> 매개변수가 있는 생성자(예시)를 정의해 놓고 (기본생성자는 정의 안함)
메인 클래스에서 new Car(); 이런식으로 기본 생성자를 호출하면 오류남
왜냐면 ======> 생성자가 있는 경우라서 자동으로 디폴트 생성자를 추가하지 않기 때문이다.
 
 
 
 
인터페이스(Interface)
 
 
 
 
*동물에 대한 메소드를 계속적으로 추가해야한다면 (기린/사자/...)
동물이라는 인터페이스를 생성해서 세부 동물에 대한 클래스를 작성할때 마다 동물이라는 인터페이스를 구현(implements)하도록 설정
 
인터페이스에서 정의한 상수는 public static final 을 생략해도 자동으로 적용됨
 
 
 
 
다형성(Polymorphism)
객체지향 프로그래밍의 특징
하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것
 
instanceof : 어떤 객체가 특정 클래스의 객체인지 조사
animal instanceof Tiger => animal 객체는 Tiger 클래스로 만들어진 객체인가?
 
인터페이스는 , 를 이용하여 여러개를 implements (구현) 할 수 있다
 
인터페이스는 일반 클래스와 달리 extends 를 이용하여 여러개의 인터페이스 상속(다중상속)이 가능하다
(* 일반 클래스는 단일상속만 가능)
 
 
추상클래스(Abstract Class)
인터페이스 역할도 하면서 클래스의 기능도 가지고 있는 클래스

'공부와개발사이 > Java' 카테고리의 다른 글

짬날때 자바(3)  (0) 2022.02.28
짬날때 자바 (1)  (0) 2022.02.15
댓글