AWS BACK DAY 4. "Java 개발 - 메서드와 객체지향 언어 개념 정리"

이강용·2023년 1월 4일

Java 기초

목록 보기
4/26
post-thumbnail

Continue

Continue란? 반복문과 함께 쓰이며, 반복문안에서 continue문을 만나면 이후의 문장을 수행하지않고 for문의 처음으로 돌아가 증감식을 수행함

  • for
public static void main(String[] args) {
		
	for(int i = 0; i<10; i++) {
		if(i % 2 != 0) {
			continue;
		}
		System.out.println("i: " + i);
	}	
	}

Continue 다음 반복을 계속 하라

결과

  • while
int i = 0;
	
		while(i < 10) {
		if(i % 2 != 0) {
			i++;
			continue;
		}
		System.out.println("i: " + i);
		i++;
		} 

MenuTree

public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);					
		boolean loopFlag1 = true;
				
		while(loopFlag1) {
			
			char select = '\0';
					
			System.out.println("========<<식당 메뉴>>========");
			System.out.println("1. 김밥천국");
			System.out.println("2. 탄탄면");
			System.out.println("3. 홍대개미");
			System.out.println("4. 밤앤밥");
			System.out.println("===========================");
			System.out.println("q. 프로그램 종료");
			System.out.println("===========================");
			
			System.out.println("식당 선택: ");
			select = sc.next().charAt(0); 
			
			if(select == 'q'|| select =='Q') {
				loopFlag1 = false;
			}
			else if(select =='1') {
				
				boolean loopFlag2 = true;
				while(loopFlag2) {
				System.out.println();
				System.out.println("========<<김밥천국>>=========");
				System.out.println("** 1. 컵라면    || 5000원  **");
				System.out.println("** 2. 돌솥비빔밤 || 7000원  **");
				System.out.println("** 3. 오므라이스 || 6000원  **");
				System.out.println("** 4. 김치볶음밤 || 5500원  **");
				System.out.println("===========================");
				System.out.println("** b. 뒤로가기             **");
				System.out.println("** q. 프로그램 종료         **");
				System.out.println("===========================");
				
				System.out.println("메뉴 번호 선택: ");
				select = sc.next().charAt(0); 
				
				
				if(select =='b'||select =='B') {
					loopFlag2 = false;
				}else if(select =='q'||select =='Q') {
					loopFlag1 = false;
					loopFlag2 = false;
				}else if(select =='1') {
					System.out.println("컵라면을 선택했습니다.\n5000원입니다.");
				}else if(select =='2') {
					System.out.println("돋솥비빔밥을 선택했습니다.\n7000원입니다.");
				}else if(select =='3') {
					System.out.println("오므라이스를 선택했습니다.\n6000원입니다.");
				}else if(select =='4') {
					System.out.println("김치볶음밥을 선택했습니다.\n5500원입니다.");
				}else {
					System.out.println();
					System.out.println("xxxxxxxxxxxxxxxxxxxx");
					System.out.println("사용할 수 없는 번호입니다.");
					System.out.println("다시 입력하세요.");
					System.out.println("xxxxxxxxxxxxxxxxxxxx");
				}
			}

			}else if(select == '2') {
				
			}else if(select == '3') {
				
			}else if(select == '4') {
				
			}else {
				System.out.println();
				System.out.println("xxxxxxxxxxxxxxxxxxxx");
				System.out.println("사용할 수 없는 번호입니다.");
				System.out.println("다시 입력하세요.");
				System.out.println("xxxxxxxxxxxxxxxxxxxx");
			}
			System.out.println("프로그램 정상 종료!");
		}
	}
}

핵심 키워드

boolean loopFlag = true;

why?

이중 while문을 사용할 경우 바깥 while문을 빠져나갈 수 없기 때문

idea

  • 식당 무인계산기 코딩
  • 메뉴 구조
  • 가격
  • 선택횟수, 가격 정보를 저장하는 방법?

응용

메서드

함수(function)

  • 특정 기능을 정의한 코드들의 집합
  • 입력값(parameter)와 출력값(return)처리문으로 구성

메서드(method)

  • 함수의 종류 중 클래스 내부에 정으되어 있는
    함수를 메서드라 한다

    호이스팅???

    메서드의 4가지 형태

  • 매개변수: X, 반환: X

    public static void method1() {
    			System.out.println("단순 실행");
    			System.out.println();
    		}
  • 매개변수: O, 반환: X

    public static void method2(int num) {
    			System.out.println("num: " + num);
    		}
  • 매개변수: X, 반환: O
public static String method4() {
			return "데이터 반환";
		}
  • 매개변수: O, 반환:O
public static String method5(int age) {
			
			return age + "살";
		}

언제 메서드 ??? 언제 함수???

메서드 오버로딩( 중복정의 )

메서드 명은 동일하게, 매개변수의 타입과 개수를 다르게 함으로써 중복으로 정의하는 기법

대표적인 오버로딩된 메서드
System.out.println();

  • return이 다르면 오버로딩이 될까?

    X

객체지향언어

  • 객체지향 언어란?
    • Object-Oriented Programming(OOP)
    • 프로그래밍 관점에서는 객체들의 관계성을 사용하여 순차적으로 수행되는 프로그램 내에서 객체들 간의 관게를 형성하여 프로그램을 동작하게함
  • 객체 = 데이터 + 기능
    • 데이터(변수) = 모니터, 본체, 키보드, 마우스 등
    • 기능(메서드) = 화면출력, 프로그램 실행, 입력, 소리출력

변수는 명사로 이름을 짓고, 메서드는 동사로 이름을 짓는다

  • 객체지향 언어특징
    1. 상속
      • 상위 클래스의 모든 것을 상속받아 사용하는 것
      • 부모와 자식 관계(데이터의 관계성)
    2. 캡슐화
      • 데이터와 기능을 외부로부터 접근은 차단하고 권한 또는 절차 없이 데이터를 변경 또는 기능 수행을 할 수 없게 캡슐처럼 보호 (데이터의 은닉성)
    3. 추상화
      • 추상적인 요소들을 묶어서 분류하는 것
      • (데이터의 구조화)
    4. 다형성
      • 객체의 기능이 다양한 형태를 가질 수 있음
      • 상속과 깊은 관계를 가짐
      • 부모 클래스로 부터 상속받은 데이터와 기능을 자식 클래스에서 재정의하여 사용할 수 있음
  • 객체지향 언어의 장점
    1. 재사용성 : 상속을 통해 코드의 재사용을 높임
    2. 생산성 향상 : 클래스 단위의 부품 조립
    3. 유지보수의 우수성 : 구조화 된 소스코드 클래스단위로 소스코드를 관리할 수 있음
  • 객체지향 언어의 단점
    1. 객체를 세분화하여 설계
    2. 실행 속도가 절차지향 언어 대비 느림
    3. 상속으로 인하여 관계가 많이 형성되면
      코딩의 난이도가 높아짐
  • 절차 VS 객체지향 언어
    절차 지향언어의 반대가 객체지향 언어가 아니다!
    객체지향 언어도 절차지향언어에 속하지만 객체라는 녀석들의 관계가 추가된 것

클래스 ( Class )

`객체에 대하여 정의해 놓은 설계도 혹은 틀`

객체 ( Object )

`클래스를 통해 구현 할 수 잇는 모든 대상`
`해당 클래스로 구현한 인스턴스를 대표하는 의미
`

인스턴스 ( Instance )

`객체가 실제로 구현된 것`

Stack & Heap

문)

변수
username
password
name
email

메소드
printUserInfo()
아이디: aaa
비밀번호: 1234
이름: 홍길동
이메일: aaa@gmail.com

프로그램을 작성하시오.

User 부

public class User {
	
	String username;
	String password;
	String name;
	String email;	
	
	void printUserInfo() {
		System.out.println("아이디: " + username);
		System.out.println("비밀번호: " + password);
		System.out.println("이름: " + name);
		System.out.println("이메일: " + email);	
	}
}

UserMain 부

public class UserMain {
	
	public static void main(String[] args) {
		
		
		User user1 = new User();
	
		user1.username = "aaa";
		user1.password = "1234";
		user1.name = "홍길동";
		user1.email= "aaa@gmail.com";
		user1.printUserInfo();
	}

}

실행결과

profile
HW + SW = 1

0개의 댓글